正如一些海报所指出的那样,你将需要使用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