[英]Oracle joining multiple tables?
我正在尝试执行以下操作
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"
结果非常接近我的预期:
问题是我不确定如何加入第五张表(表E),因为这与表A没有任何关系。
您可以只在表E中添加另一个左连接到表D。基本上,表D和E之间存在关系,并且输入到表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"
最佳实践:在后面的示例中,使用显式联接。
当联接多个表时,联接不必全部从同一个表开始,每个表必须简单地相关。 那可以
select *
from a
inner join b on a.id = b.id_a
inner join c on b.id = c.id_b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.