我需要在不同行集上使用不同條件連接兩個表。在不同行集上加入具有不同條件的語句
例如,如果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) ...
但它是非常非常慢,所以有什麼問題,什麼是更好的解決方案?
我需要在不同行集上使用不同條件連接兩個表。在不同行集上加入具有不同條件的語句
例如,如果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) ...
但它是非常非常慢,所以有什麼問題,什麼是更好的解決方案?
RowID <100 on t1.ColA=t2.ColB
UNION ALL
If RowID >=100 on t1.ColA=t2.ColB+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
可能是它會更快
+1作爲OR語句prolly打破了指數該溶液還應當添加它快。 – YvesR
非常好。 1秒爲200000記錄,但是我的查詢問題是什麼?! – ARZ