我有以下类型的查询:
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中的行?
提前致谢!
答案 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
答案 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