问题描述:
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条件是在表连接之前执行