簡體   English   中英

甲骨文加入多個表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM