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:使用左连接选择未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章