我在工作中重构一些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为null或b.status in (10, 100)
是当 b.status 为 1 且 b.id=a.id
在第一个查询中,您仍然会从表 A 中获取相应的 B 部分为 NULL 的行,因为 On 条件未完全满足。 在第二个查询中,您将获得 a 和 b 表的 JOIN 中的行,该行将在 where 子句中丢失。
关于SQL 左连接 JOIN 条件中的过滤器与 WHERE 子句中的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272263/