2017-03-03 29 views
0

我想運行這個查詢,但無法理解它的工作過程。此查詢是否像交叉連接一樣工作?

SELECT * 
FROM TABLE1 T1 
INNER JOIN TABLE2 T2 ON T1.ID = T2.ID 
LEFT JOIN TABLE1 T3 ON T1.ID = T2.ID 

table1中包含3條記錄與順序編號1,2,3和表2中包含4條記錄與順序編號1,2,3,4 和一個一件事我也想知道那是,這是否查詢從右向左執行?我的意思是左連接過程先執行然後內連接?我正在根據查詢執行計劃說這個。

回答

3

這裏是你的當前查詢:

SELECT * 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.id = t2.id 
LEFT JOIN table1 t3 
    ON t1.id = t2.id 

第一個加入僅僅是table1table2之間正常的內連接。第二次連接是左連接,但ON條件是多餘的,我相信如果沒有這種條件,行爲將是相同的。原因在於連接條件t1.id = t2.id在查詢中的該點處將始終爲真,對於中的每個記錄在中間表中都是如此。因此,看起來第二次加入實際上是交叉加入table1

通常,您的連接條件將涉及兩個正在連接的表。

2

是的,它像一個交叉連接一樣工作。如果這是你的意圖,你應該正確地重寫它。你有什麼是誤導和混亂(它是在哪裏來自原?)

select * from table1 t1 
inner join table2 t2 
on t1.id=t2.id 
cross join table1 t3 

該表格,篩選器,接縫是evalulated由查詢計劃(按Ctrl-L)所規定的順序。這可能隨時改變。你不應該關心這些運行的命令 - 你只需要知道,無論執行的結果如何,你都會得到相同的結果。查詢計劃員可能會選擇一種方法,如果它認爲它會更快