Left join 后的条件和where 后的条件的区别

-- 使用ON子句条件

SELECT *

FROM A

LEFT JOIN B ON A.key = B.key AND B.condition;

-- 使用WHERE子句条件

SELECT *

FROM A

LEFT JOIN B ON A.key = B.key

WHERE B.condition;

在第一个查询中,即使B.condition不成立,A表的所有记录仍然会返回,B表的相关列会显示为NULL。而在第二个查询中,只有当B.condition成立时,A表和B表的匹配记录才会返回。如果B.condition不成立,即使A表有记录,也不会出现在结果集中。

因此,如果你希望无论B表的条件是否满足,都要返回A表的所有记录,应该将条件放在ON子句中。如果你希望根据B表的条件过滤结果集,那么应该使用WHERE子句。这是一个重要的区别,因为它会影响查询结果的内容123。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: