Oracle加入多个表?

时间:2014-04-10 02:03:15

标签: sql oracle join

我正在尝试执行以下操作

  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

结果是

enter image description here

我的目标是在此查询中添加几个表

  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总是有一些值,我得到以下结果。

enter image description here

预期结果是

enter image description here

我尝试使用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"

结果非常接近我的预期:

enter image description here

问题是我不确定如何加入第5个表(表E),因为它与表A没有任何联系。

2 个答案:

答案 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