开发中遇到的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
本文作者:YoProgrammer
本文链接:https://www.cnblogs.com/sakanayo/p/16323275.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步