如何获得以下场景的完全匹配连接?

时间:2010-09-02 16:49:09

标签: sql sql-server tsql sql-server-2008 join

我如何加入下表

  TableA    TableB             TableC           TableD
  ID ID_C  ID  ID_A Value       ID            ID  ID_C Value
   1  1     1   1    a          1              1   1    a
            2   1    b                         2   1    b

以获得结果

  Result
  ID ID_B Value  ID_C ID_D Value
  1   1     a      1     1  a
  1   2     b      1     2  b

并且我的结果不应包含1 2 b 1 1 b,并且两个值列不能始终具有相同的值,因此不能在条件中使用。

为了简化,

   Resultant Table           TableA              TableB
   ID   Value                ID Value            ID  ID_A
    1   a                     1  a               1    1        
    1   b                     2  g               2    1
    2   a                     3  d               3    2
    3   c                                        4    3

现在我需要使用TableA,TableB加入Resultant Table,以便从TableA,TableB和ResultantTable.ID = TableA.ID和TableB.ID_A = TableA.ID中获取一些列,因为它是一个外键。

使用TableB进行连接会变为重复。由于ID = 1出现两次,我得到4条记录,其中ID = 1,当时只有2条记录。它可以使用distinct或group by来完成,但我还需要显示其他列。如何在此过程中执行这两个操作。

3 个答案:

答案 0 :(得分:0)

SELECT A.ID, B.ID, B.Value, C.ID, D.ID, D.Value
FROM TableA A
INNER JOIN TableB B ON A.ID = B.ID_A
INNER JOIN TableC C ON A.ID_C = C.ID
INNER JOIN TableD D ON B.ID = D.ID AND C.ID = D.ID_C

答案 1 :(得分:0)

您告诉我们TableB中的字段“值”不应该与TableD中的字段“value”不同吗?我们可以用B.Value = D.Value替换B.ID = D.ID,以解决您的问题吗?

您确定,这是假设工作的方式吗?

答案 2 :(得分:0)

尝试:

SELECT A.ID, B.ID ID_B, B.Value Value_B, C.ID ID_C, D.ID ID_D, D.Value Value_D
FROM TableA A
JOIN TableB B ON A.ID = B.ID_A
JOIN TableC C ON A.ID_C = C.ID
JOIN TableD D ON B.Value = D.Value AND C.ID = D.ID_C