mysql使用left join where右表条件无效,变成inner join 或 单表查询效果

问题描述:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值