我的问题类似于这个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