2010-02-18 77 views
4

什麼是正確的語法來執行外部聯接下列要求:級聯左外聯接

A於A.c1 = B.c1
乙左外左外連接乙加入C對B.c2 = C.c2
A.c1上的左外連接D = D.c1

所以A,B和C級聯以及A和D級聯。

我知道如何編寫A-> B-> C,但我不知道如何添加D.我需要範圍或括號。

回答

8

這應該工作,只要你想:

SELECT 
    * 
    FROM A 
    left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
    left outer join D on A.c1 = D.c1 

數據庫引擎看什麼你都加入到,沒有的連接順序。 D連接到A,並且與B或C無關

+1

+1:我太慢了:( –

3

您加入的順序無關緊要,數據庫將在所有表中建立行的每個組合的結果集,受限於on子句。例如,由於1 = 1總是爲真,這將給你1000行:

select * 
from ten_row_table A 
left join ten_row_table B on 1=1 
left join ten_row_table C on 1=1 

但是這會給你10行:

select * 
from ten_row_table A 
left join ten_row_table B on A.id = B.id 
left join ten_row_table C on A.id = C.id 

可以使複雜的查詢稍微壓痕可讀。我們通過四個空格縮進第二個和更多的依賴關係,例如:

from A 
left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
     left outer join D on C.c3 = D.c3 
    left outer join E on B.c2 = E.c2 
left outer join F on A.c1 = F.c1 
+1

尼斯縮進計劃! –