T-SQL:如何在不创建额外行的情况下连接表 - 需要一行到一行的对应关系

68C*_*Guy 2 t-sql sql-server iteration join sql-server-2008-r2

我有一个场景,我需要加入两个SQL表,我正在努力如何做到这一点.让我们在表AI中说:

ColA  ColB   ColC   ColD
45     55     17     45
45     55     17     47
45     55     17     49
45     55     17     51
Run Code Online (Sandbox Code Playgroud)

在表BI中有这样的:

ColA  ColB   ColC   ColE
45     55     17     55
45     55     17     56
45     55     17     57
45     55     17     58
Run Code Online (Sandbox Code Playgroud)

我需要创建一个看起来像这样的表 - 只注意4行,而不是我正在使用的内连接产生的16行.

ColA  ColB   ColC   ColD   ColE
45     55     17     45     55
45     55     17     47     56
45     55     17     49     57
45     55     17     51     58
Run Code Online (Sandbox Code Playgroud)

我几乎没有想法.两个表总是具有相同的行数.有没有办法使用连接执行此操作,还是应该遍历表A(即获取行号)并获取表B中的匹配行号?

任何想法将不胜感激.

Mar*_*ith 5

假设至少SQL Server 2005

WITH T1
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColD)
                RN
         FROM   TableA),
     T2
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColE)
                RN
         FROM   TableB)
SELECT T1.ColA,
       T1.ColB,
       T1.ColC,
       T1.ColD,
       T2.ColE
FROM   T1
       JOIN T2
         ON T1.ColA = T2.ColA
            AND T1.ColB = T2.ColB
            AND T1.ColC = T2.ColC
            AND T1.RN = T2.RN  
Run Code Online (Sandbox Code Playgroud)