开发中遇到的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 中国大陆许可协议进行许可。

posted @   YoProgrammer  阅读(63)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
No audio
00:00 / 00:00