我在工作时重构了一些sql,偶然发现了一些我不确定如何解释的东西。我以为有两个查询会导致相同的结果,但是没有,我不确定为什么。
查询如下:
select *
from TableA as a
left join TableB b on a.id = b.id and b.status in (10, 100)
select *
from TableA as a
left join TableB b on a.id = b.id
where b.status is null or b.status in (10, 100)
这些何时将不会返回相同的结果?
与Where条件的最大区别b.status is null or b.status in (10, 100)
是b.status为1以及b.id = a.id
在第一个查询中,您仍然会从表A中获得行,并且对应的B部分为NULL,因为不能完全满足On条件。在第二个查询中,您将获得a和b表的JOIN中的行,这些行将在where子句中丢失。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句