在使用LEFT JOIN時,遇到了結果不對的問題。
在StackOverflow找到了答案:http://stackoverflow.com/q/354070/822864
使用StackOverflow上的例子解釋一下。
以下兩句SQL回來的結果,看來是一樣。而且例子1在JOIN的條件上已有Orders.ID=12345這個名似是一個篩選條件,想來合併速度定必更快。
例子1:
SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID AND Orders.ID=12345
例子2:
SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID
WHERE Orders.ID = 12345
但事實並非如此。
例子1的執行結果會把OrderLines裡的記錄全都合併進去,而只有符合OrderLines.OrderID=Orders.ID和Orders.ID=12345這兩個條件的才會被連結成一個記錄。
而例子2則能輸出我想要的結果:把兩個表格合併並只出現Orders.ID = 12345的記錄。
根據現代的資料庫,他們一般也有優化SQL邏輯的能力。這種老掉牙JOIN語法,優化器是種得把集合處理好的。
*測試和使用環境是Oracle Enterprise Database 11g Release 2
沒有留言:
發佈留言