问题描述:
select *
from A
left join B on A.id = B.aid
where
B.字段 = xxx
如果使用left join以A为主表,并查询A表全部数据,和关联的B表数据
where后面就不能出现B表的条件,否则会变成inner join效果,或理解为单表查询效果
举例说明:
(假设有两张表)
A表 战队表 team:

B表 成员表 team_member:

查询语句:
select *
from team a
left join team_member b on a.id_ = b.team_id
where b.team_identity = '队长'
查询结果:

原因分析:
sql会先执行from A left join B on A.id = B.aid组装两表数据,并返回A和B联查出的结果集
也就是生成了一张中间的临时表,这时就没有两表的概念了
在临时表的基础上,再执行B表的where条件,过滤出的肯定是条件满足的数据
所以会变成inner join效果或者理解为单表查询效果
解决方案:
select *
from team a
left join team_member b on a.id_ = b.team_id
and b.team_identity = '队长'
查询结果:

总结:
where条件是在表连接之后执行
on条件是在表连接之前执行
本文深入解析SQL中Left Join语句的正确用法,强调在使用Left Join时,where子句和on子句的区别及影响。通过具体案例,阐述了如何避免将Left Join误用为Inner Join,确保查询结果符合预期。
438

被折叠的 条评论
为什么被折叠?



