我的問題類似於這個SQL order of operations但有一點麻煩,所以我認爲這是公平的問題。WHERE和JOIN操作順序
我正在使用Teradata。我有2個表格:table1
,table2
。
table1
只有一個id
列。
table2
有以下欄目:id
,val
我可能是錯的,但我認爲這兩個語句產生相同的結果。
聲明1.
SELECT table1.id, table2.val
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
聲明2.
SELECT table1.id, table3.val
FROM table1
INNER JOIN (
SELECT *
FROM table2
WHERE val<100
) table3
ON table1.id=table3.id
我的問題是,將查詢優化器是足夠聰明的
- 執行WHERE子句第一再聲明1以後加入
- 知道表3在報表2中實際上並不需要
我對SQL很陌生,所以請教我如果我誤解任何東西。
我還以爲查詢優化器會拿出兩個相同的計劃。儘管運行'EXPLAIN'計劃來驗證。 – 2010-10-18 15:23:23