我有一个包含4列的临时表
question_tbl:
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
还有其他方法可以在桌面上查找组合吗? 请建议
答案 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