【问题标题】:Get the records matching the combination of column values from a temporary table从临时表中获取与列值组合匹配的记录
【发布时间】:2018-03-05 09:11:10
【问题描述】:

我有一个有 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 TableB 中从 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

还有其他替代方法来查找表格上的组合吗? 请推荐

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多