當使用子聯接時,我注意到了生成相同結果的兩種不同方式。在子連接中,使用'select'連接兩個表,然後給它一個在後續行上引用的別名。另一個只是'匿名'連接兩個表,後面的行使用Sub-Join的表別名。我有下面的示例代碼。我的問題是:SQL子加入語法
這些是否相同,只是保存鍵擊?
是否使用'select'創建臨時表而另一個不是?
兩者之間會有性能差異嗎?我不認爲會基於執行分析器,但我想我會問。
是否有一個「名稱」爲一個或他人次加入式「(如別名次加入與匿名子加入?)
至於表的別名的作用域規則和列名,是否有任何好文件,有人可以指出我可以解釋這些情況?我已搜索並找不到任何匹配的內容(儘管我不確定我是否正確搜索)?
這裏有兩個查詢:
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (select b2.*, bp2.product_id
from Bugs b2
JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id) AS sub1
ON (bp1.product_id = sub1.product_id AND (b1.date_reported < sub1.date_reported))
WHERE sub1.bug_id IS NULL;
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (Bugs b2 JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id)
ON (bp1.product_id = bp2.product_id AND (b1.date_reported < b2.date_reported))
WHERE b2.bug_id IS NULL;
感謝約翰,但我的問題不是如何使查詢工作。問題基本上是「這兩個查詢有什麼區別?「我試圖理解爲什麼一種查詢方式比另一種更好(如果它是的話)。 – steve 2013-02-23 15:18:27