我正在尝试执行以下操作
select
TA.C1 ,TB.C1 ,TC.C1
from TableA TA ,TableB TB , TableC TC
where TA.C1 = "ABC"
AND TA.C2 = TB.C1
and TA.C3 = TC.C1
结果是
我的目标是在此查询中添加几个表
select
TA.C1,TB.C1,TC.C1,TD.C1,TE.C1
from TableA TA ,TableB TB , TableC TC , TableD TD, TableE TE
where TA.C1 = "ABC"
and TA.C2 = TB.C1
and TA.C3 = TC.C1
and TA.C4 = TD.C1
and TD.C2 = TE.C1
但由于列TD.C1包含空值,而TA.C4总是有一些值,我得到以下结果。
预期结果是
我尝试使用Joins加入4个表:
select
TA.C1,TB.C1,TC.C1,TD.C1
from TableA TA
JOIN TableB TB ON (TA.C2 = TB.C1)
JOIN TableC TC ON (TA.C3 = TC.C1)
LEFT JOIN TableD TD ON (TA.C4 = TD.C1)
AND TA.C1 = "ABC"
结果非常接近我的预期:
问题是我不确定如何加入第5个表(表E),因为它与表A没有任何联系。
答案 0 :(得分:1)
您可以将表E与另一个左连接包含在表D中。基本上,表D和E之间存在关系,输入的数据必须与之一致。如果没有数据,则关系仍然存在,因此连接将根据需要返回空值。
select
TA.C1,TB.C1,TC.C1,TD.C1, TE.C1
from TableA TA
INNER JOIN TableB TB ON (TA.C2 = TB.C1)
INNER JOIN TableC TC ON (TA.C3 = TC.C1)
LEFT JOIN TableD TD ON (TA.C4 = TD.C1)
LEFT JOIN TableE TE ON (TD.C2 = TE.C1)
AND TA.C3 = "ABC"
答案 1 :(得分:0)
最佳实践:使用显式联接,就像以后的示例一样。
当连接多个表时,连接不需要全部以相同的表开始,每个表必须简单相关。那就是你可以
select *
from a
inner join b on a.id = b.id_a
inner join c on b.id = c.id_b