簡體   English   中英

子查詢或聯接條件中的where子句之間的區別

[英]Difference between where clause in subquery or join condition

當我比較自己構造的查詢和實體框架構造的查詢時,遇到一個有趣的問題,這是我在存儲過程中進行的查詢:

select *
from TableA a
    join (select b.Col2, c.Col3
         from TableB b
            join TableC c on b.Col1=c.Col1
        where b.Col2 in (1,2,3,4)
        ) as bc on a.Col3=bc.Col3

這是由實體框架構造的查詢:

select *
from TableA a
    join (select b.Col2, c.Col3
         from TableB b
            join TableC c on b.Col1=c.Col1
    ) as bc on a.Col3=bc.Col3 and bc.Col2 in (1,2,3,4)

我的問題是,sql編譯器在哪里足以以相同的方式優化查詢? (假設索引在joining / where條件中正確定義。

在某些智能優化器(例如Teradata)中,兩個查詢中的任何一個都將以相同的方式重寫:

 select a.columns,b.Col2,c.Col3  
 from TableA a

join TableB b
join TableC c 
on b.Col1=c.Col1
on a.Col3=bc.Col3 and bc.Col2 in (1,2,3,4)

請參閱說明,以了解DBMS在做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM