2015-01-16 75 views
0
SELECT * FROM Table a 
INNER JOIN Table b on a.ID = b.ID 
LEFT JOIN Table c on a.ID = c.ID 
LEFT JOIN Table d on c.Something = d.Something -- which is left vs right 
LEFT JOIN Table e on b.Something = e.Something -- which is left vs right 

這可能是一個愚蠢的問題,但我可以刪除這個大腦堵塞,哪個表是「左」,哪個表是我最後兩個連接中的「右」?這是由列表中與「on」對應的第一個確定的嗎?我可以編寫查詢並確保獲得正確的結果,但是在技術層面上難以理解它......當處理上述示例的中間表時。中間SQL Join中的「左」和「右」表是什麼?

+1

爲什麼倒票?這是很多人混淆的地方。 – user1447679

回答

1
LEFT JOIN Table d on c.Something = d.Something 

c離開,d是正確的。

LEFT JOIN Table e on b.Something = e.Something 

b是左邊,e是正確的。

您加入查詢的表格(在本例中爲d和e)是正確的,因此無論您與之前查詢的關鍵字來自左側表格(c和b)。

+1

這是正確的,但不能解釋原因。 – DavidG

+1

所以左邊是列表中的哪一個是「第一」,逐行? – user1447679

+0

檢查編輯和解釋。我意識到需要解釋大約5毫秒後,我打「後」。 –

1

想象一下,每次添加表時,您都在構建水平層次結構。

在這種情況下,您從FROM Table A開始,以便成爲層次結構的頂層(坐在最左側)。

當您INNER JOIN Table b,它成爲第二個級別,並坐在表A的權利。在這個連接表A是左,表B是正確的。

您的LEFT JOIN的情況也是如此。

enter image description here

另外值得一提的是,列的ON order by子句中的連接並不重要。

LEFT JOIN Table d on d.Something = c.Something 
LEFT JOIN Table e on e.Something = b.Something 

裝置相同:

​​

因爲在其中添加表中的順序會影響它們是的連接側上,而不是ON子句的順序。

相關問題