【问题标题】:How do you JOIN two MySQL tables where the data is NOT in the other table?你如何加入两个数据不在另一个表中的 MySQL 表?
【发布时间】:2008-12-15 22:02:21
【问题描述】:

例如,我有一张宠物桌和一张丢失宠物桌。我想通过 1 次加入和没有子选择来获得所有不会丢失的宠物。那可能吗?典型的连接只返回两个表中的结果。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    您描述的是与标准 INNER JOIN 相比的 OUTER JOIN。谷歌或检查你的文档——我相信你会找到很多例子。 :)

    SELECT * FROM pets AS p
    LEFT OUTER JOIN lost-pets AS lp
    ON p.name = lp.name
    哪里 lp.id 是 NULL

    【讨论】:

      【解决方案2】:
      SELECT PETS.NAME
      FROM PETS
         LEFT OUTER JOIN LOST_PETS
           ON PETS.PET_ID = LOST_PETS.PET_ID
      WHERE LOST_PETS.PET_ID IS NULL;
      

      【讨论】:

        【解决方案3】:

        有可能,是的,说:

        SELECT *
        FROM pets LEFT OUTER JOIN pets-lost ON pets.id = pets-lost.id
        WHERE pets-lost.id IS NULL;
        

        【讨论】:

          【解决方案4】:

          为什么不做 where not exists (select * from Lost ...)?它是一个子选择,但我不明白为什么会出现问题。

          【讨论】:

          • 一个问题是,例如旧版本的 mysql 不支持子选择。
          • 另一个问题是子选择比连接慢得多。
          • 另外一个问题是,问题是在没有子选择的情况下如何做到这一点
          • @mat:“子选择比连接慢得多”并非总是如此。你需要实际测量。一些子选择被优化为连接。
          • 查询优化器越好,它就越不重要。但是,有些确实很愚蠢。
          猜你喜欢
          • 2019-05-24
          • 2018-07-26
          • 2010-09-17
          • 1970-01-01
          • 2015-11-08
          • 2013-09-10
          相关资源
          最近更新 更多