下面先看原语句
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
现在的目标是这样的,想要让 a left join e 表
错误的写法如下:
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 表的对应关系。
办法一:子查询方式 将此结果作为结果集在进行子联查连接 e 表
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