mysql使用left join居然变成了innerjoin

问题描述:

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条件是在表连接之前执行

    A+
发布日期:2023年07月23日  所属分类:未分类

发表评论

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