【问题标题】:Mysql: Select with Left Join not working as expectedMysql:使用左连接选择未按预期工作
【发布时间】:2012-03-31 06:27:49
【问题描述】:

我有以下类型的查询:

select * from tbl_1 where [cond] as aliasA LEFT JOIN tbl_2 as aliasB 
 ON (aliasA.id = aliasB.id) WHERE aliasB.id IS NULL

它似乎在工作,只是它忽略了最后一个WHERE aliasB.id IS NULL。 所以,它只是返回以下结果:

select * from tbl_1 where cond as aliasA LEFT JOIN tbl_2 as aliasB 
 ON (aliasA.id = aliasB.id)

我将如何更改上述查询以获取 查询 tbl_1 的结果 where [cond] 只显示不在 tbl_2 中的行?

提前致谢!

【问题讨论】:

  • 不要忘记将答案标记为已接受,如果您得到想要的信息,请点赞

标签: mysql sql select left-join


【解决方案1】:

aliasB.id = NULL 将始终为假。正确的方法是aliasB.id IS NULL 或者更丑的 MySQL 特有的aliasB.id <=> NULL

【讨论】:

  • 你是对的。不幸的是,我的意思是说 IS NULL(这是我的代码的编写方式),但结果正如我所说(没有给我我想要的)。我编辑了我的帖子,更正了 IS NULL 部分。
  • 那么我认为您应该尝试将第一个条件移动到连接后的WHERE 子句,就像 Marco 所写的那样。
【解决方案2】:

原始答案:How do I decide when to use right joins/left joins or inner joins Or how to determine which table is on which side?

我发现最好的方法是看看下面的图片清除你的疑问

检查图片中的案例1和2会给你答案

并将您的 where 条件更改为 WHERE aliasB.id is NULL

【讨论】:

    【解决方案3】:

    你可以试试:

    SELECT * FROM tbl_1 aliasA LEFT JOIN tbl_2 aliasB
    ON aliasA.id = aliasB.id
    WHERE condA 
      AND aliasB.id IS NULL
    

    【讨论】:

      【解决方案4】:

      http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

      您需要使用“IS NULL”而不是“= NULL”

      【讨论】:

        【解决方案5】:

        您需要使用IS NULL 来检查NULL 值,而不是= NULL

        WHERE aliasB.id IS NULL
        

        【讨论】:

          猜你喜欢
          • 2015-06-17
          • 2016-12-24
          • 1970-01-01
          • 1970-01-01
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多