sqlleftjoin条件筛选的放置位置
场景:
admin_user表 left join admin_role表,要求:不管admin_role表数据是否存在,admin_user表数据都展⽰
sql left join 多表连接问题:
表:admin_user
admin_role
sql
SELECT
au.id,
au.name as userName,
ar.name as roleName
FROM
`admin_user` au
LEFT JOIN admin_role ar le_id = ar.id
WHERE
ar.account_status = 1
结果:
这显然是不符合要求的(不管右表是否有匹配数据,左表数据都展⽰)
原因:
在where之前的数据 先联查,合并成了⼀个集合,后对此集合进⾏account_status判断,此时右表数据为空,⽽空不等于1,所以数据都被过滤掉了。
解决:
SELECT
au.id,
au.name as userName,
ar.name as roleName
FROM
`admin_user` au
LEFT JOIN admin_role ar le_id = ar.id and ar.account_status = 1
在两表查询之前,先过滤数据,过滤的仅仅是B表,所谓的先过滤B表,再联查A和B
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论