获取与临时表中的列值组合匹配的记录

时间:2018-03-05 09:11:11

标签: sql sql-server-2012 sql-server-2016

我有一个包含4列的临时表

question_tbl:

TempTable - 要查找的组合

id      | Code1    | Code2       | code3
--------+----------+-------------+---------
111       | AA       | A1          | X
222       | BB       | B1          | Y
333       | CC       | C1          | Z
444       | DD       | D1          | ZZ

Code1和Code2是tableA中的列,Code3在tableB中

表A有记录

DeptID      | Code1    | Code2       | 
--------+----------+-------------+---------
A           | AA       | A1          | 
B           | BC       | B1          | 
C           | CC       | C1          | 
D           | DC       | D1          | 
E           | DD       | D1          | 

表B有记录

DeptID      | Code1     
--------+----------+-------------+---------
A           | X
B           | XX       
C           | Z       
D           | YY       
E           | Z Z      

我必须使用temptable来查找表A和B. 如果我找到使用两个表匹配的3个组合,那么我附加Id 表B中从Temp到DeptId的值 所以我的最终结果应该是

DeptID      | Code1     
--------+----------+-------------+---------
A111           | X
C333           | Z       
E444           | ZZ      

我目前使用的查询如下。它工作正常。但是给出了    我是一个性能问题,因为表A和B中的记录数量更多    超过20000

SELECT B.DeptID + T.ID
FROM TableA                                 A
INNER JOIN #TMP                             T 
    ON T.Code3  = A.Code3
INNER JOIN TableB                           B
    ON B.Code1  = T.Code1  AND B.Code2 =  T.Code2

还有其他方法可以在桌面上查找组合吗? 请建议

1 个答案:

答案 0 :(得分:0)

试试这个:

select cast([Dept].[DeptID] as varchar(100)) + cast([TT].[id] as varchar(100)) [DeptID],
       [Dept].[Code3]
from (
    select [A].[DeptID] [DeptID],
           [A].[Code1] [Code1],
           [A].[Code2] [Code2],
           [B].[Code1] [Code3]
    from TableA [A]
    join TableB [B] on [A].DeptID = [B].DeptID
) [Dept] left join TempTable [TT] on
([Dept].[Code1] = [TT].[Code1] and [Dept].[Code2] = [TT].[Code2] and [Dept].[Code3] = [TT].[Code3])
where [TT].[id] is not null