正如一些海報所指出的那樣,你將需要使用CONCAT而不是在可樂COLB進行查詢的獨立,以獲得正確的數據試試。
如果這是一個足夠重要的查詢值得自己的索引,或CONCAT(ColA,ColB)是常用的數據。您可以考慮爲CONCAT(ColA,ColB)和該計算列上的索引創建計算列。
SELECT DISTINCT
A.ColA, A.ColB
FROM TableA A
LEFT JOIN TableB B
ON B.CONCAT(ColA,ColB) = A.CONCAT(ColA,ColB)
WHERE A.ColA <> 0
and B.ColB <> 0
and B.ColB is null
我也有運氣過濾使用CTE,然後做最後的任何計算,以充分利用目前在桌上的索引。
WITH FilteredA as (
select ColA, ColB
from tableA
WHERE ColA <> 0),
FilteredB as (
select ColA, ColB
from tableB
WHERE ColB <> 0)
SELECT DISTINCT FilteredA.*
from FilteredA
LEFT JOIN FilteredB ON FilteredA.ColA = FilteredB.ColB
AND FilteredA.ColB = FilteredB.ColB
WHERE FilteredA.CONCAT(ColA,ColB) = FilteredB.CONCAT(ColA,ColB)
請張貼執行計劃以XML,表架構有一些樣本數據 – TheGameiswar
你有'可樂<> 0 2個AND和AND CONCAT' – vercelli
是的cols號碼?你確定連接它們嗎? 'select select concat(a,b) from(select 11 as a,2 as b union all select 1,12)t 其中concat(a,b)='112' – Serg