Mysql:使用左连接选择未按预期工作

Posted

技术标签:

【中文标题】Mysql:使用左连接选择未按预期工作【英文标题】:Mysql: Select with Left Join not working as expected 【发布时间】: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 中的行?

提前致谢!

【问题讨论】:

不要忘记将答案标记为已接受,如果您得到想要的信息,请点赞 【参考方案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

【讨论】:

以上是关于Mysql:使用左连接选择未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

PHP Mysql加入问题

MySQL选择左连接不同?

mysql:左连接但从连接表中选择一个特定项目

Hive 中的左连接未返回预期结果

MySQL选择左连接为空的行

使用子查询改进 MySql 查询左外连接