3
如果我有查詢:加入時的行爲表沒有使用加入自己的密鑰
SELECT *
FROM Table1 a
Inner Join Table2 b on a.Key = b.Key
Inner Join Table3 c on a.Key = b.Key
這是怎麼回事?我最近在一些代碼中發現了這個錯誤(想要在a.Key = c.Key
上加入c),並且當我發現並修復它時,我很驚訝它允許執行並獲得結果。
我很好奇,當調用這樣的查詢時會發生什麼。據我所知,它執行(table1 join table2)和table3之間的交叉連接?
因爲它是一個*條件總是爲真*,所以它相當於'SELECT * FROM Table1 a.Key = b.Key Inner Join Table3 c on 1 = 1'上的Inner Join Table2 b,例如笛卡爾(t1加入t2)* t3的乘積。 – wildplasser
是的,它在這種情況下有效地進行CROSS JOIN。它允許這樣做,因爲它允許ON子句中的任何一組邏輯條件,並且假定這是有意的。 (這很好,因爲有些案例和技巧可以利用這一點)。 – RBarryYoung
@wildplasser。 。 。你是對的。你應該把它作爲答案。 –