开发中遇到的SQL问题
SQL问题
1.1 区分内部关联和外部关联
普通的JOIN就是内连接,返回A表与B表共有的数据
清楚LEFT JOIN 等外连接的作用,若 左/右 表字段为null时,返回null
在 LEFT JOIN 表名 ON 条件后 , 还可以跟上 AND 另外的条件 , 在进行关联时对数据再进一步筛选
如果是在外部的WHERE进行筛选条件的增加则是对已经关联后形成的数据再进一步筛选

1.2 FROM多表情况下的LEFT JOIN问题 (https://blog.csdn.net/YL3126/article/details/115728744)
问题语句:
select a.id as aid, b.id as bid, c.id as cid from a,b,c where a.id=b.aid c.id=b.cid
若直接写成
select a.id as aid, b.id as bid, c.id as cid, e.id as eid from a,b,c left join e a.id=e.aid where a.id=b.aid c.id=b.cid
这种写法会报多列引用的错误,因为这种方式会认为前面的三张表的结果为一个数据集,所以找不到 a 表的对应关系
方法一:将a,b,c的查询作为一个结果集再LEFT JOIN新表
select * from ( select a.id as aid, b.id as bid, c.id as cid, e.id as eid from a,b,c where a.id=b.aid c.id=b.cid ) AS m left join e on m.aid=e.aid
方法二:由于 from 多表 == inner join,可以改造此SQL
select a.id as aid, b.id as bid, c.id as cid, e.id as eid from a inner join b on a.id=b.aid inner join c c.id=b.cid left join e a.id=e.aid
方法三:从a表一直外连接到e表,需要配合业务场景使用
select a.id as aid, b.id as bid, c.id as cid, e.id as eid from a left join b on a.id = b.aid left join c on b.id = c.bid left join e on c.id = e.cid

浙公网安备 33010602011771号