Mysql:选择左连接不按预期工作

时间:2012-03-14 18:35:21

标签: mysql sql select left-join

我有以下类型的查询:

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的结果,其中[cond]只显示不在tbl_2中的行?

提前致谢!

5 个答案:

答案 0 :(得分:6)

aliasB.id = NULL永远都是假的。正确的方法是aliasB.id IS NULL或更丑陋的MySQL特定aliasB.id <=> NULL

答案 1 :(得分:6)

Orignal Ans at: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 aliasB.id is NULL

alt text

答案 2 :(得分:3)

你可以尝试:

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

WHERE aliasB.id IS NULL