2013-08-21 34 views
1

我需要在不同行集上使用不同條件連接兩個表。在不同行集上加入具有不同條件的語句

例如,如果RowID < 100 on t1.ColA = t2.ColB如果RowID >= 100 on t1.ColA = t2.ColB+1

我實現了這個如下:

... On (RowID <100 and t1.ColA=t2.ColB) OR (RowID >=100 on t1.ColA=t2.ColB+1) ... 

但它是非常非常慢,所以有什麼問題,什麼是更好的解決方案?

回答

4
RowID <100 on t1.ColA=t2.ColB 

UNION ALL 

If RowID >=100 on t1.ColA=t2.ColB+1 

試試這個解決方案。

+0

+1作爲OR語句prolly打破了指數該溶液還應當添加它快。 – YvesR

+0

非常好。 1秒爲200000記錄,但是我的查詢問題是什麼?! – ARZ

1

你可以試試這個:

On t1.ColA=CASE 
WHEN RowID<100 THEN t2.ColB 
WHEN RowID>=100 THEN t2.ColB+1 
END 

SELECT 
... 
CASE 
    WHEN RowID<100 THEN t2.Column 
    WHEN RowID>=100 THEN t3.Column 
END 
... 
Join t2 On t1.ColA=t2.ColB 
Join t2 as t3 On t1.ColA=t3.ColB+1 

可能是它會更快

+0

相同的性能。 – ARZ

+0

好的,兩個單獨的equi連接而不是一個非equi連接怎麼樣?你試過這個嗎? –

+0

謝謝@安德烈,但仍然有同樣的表現;( – ARZ

相關問題