SQL在JOIN条件下使用过滤器左联接vs在WHERE子句中使用过滤器

奇人

我在工作时重构了一些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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章