SQL:连接表,不包括第二个表中的重复项

时间:2013-10-19 00:04:42

标签: sql join duplicates subquery no-duplicates

我有两个表(Table1和Table2)需要加入。

id链接Table1和Table2。

  • 输出表需要包含Table1中的所有行。

  • 表2有重复项,不应出现在输出表中。

  • 如果表2中的重复行在给定NULL的列中具有id,并且表2中的另一行在此列中具有相同id的值,那么输出表应该包含值而不是NULL。 (例如,如下例中的id 002,003和005)

  • 如果重复行包含给定id的同一列的不同值。可以将任何值带到输出表。 (例如,如下例中的id 001)

示例:

表1:

ID     Value1
----   ------
001    Mary
002    Jane
003    Peter
004    Smith
005    Katy

表2:

ID     Value2  Value3
----   ------  ------
001    25      33
001    25      38
001    NULL    33
002    NULL    NULL
002    18      56
003    22      NULL
005    NULL    34

我需要加入表格并获得以下结果:

ID     Value1  Value2  Value3
----   ------  ------  ------
001    Mary    25      33
002    Jane    47      88
003    Peter   22      NULL
004    Smith   NULL    NULL
005    Katy    NULL    34

感谢您的时间!

1 个答案:

答案 0 :(得分:3)

请参阅SQL Fiddle

SELECT DISTINCT T1.ID, T1.Value1, 
  (
    SELECT ST2.Value2 
    FROM Table2 ST2 
    WHERE T1.ID = ST2.ID
    ORDER BY ST2.Value2
    LIMIT 1
  ) AS Value2, 
  (
    SELECT ST3.Value3 
    FROM Table2 ST3 
    WHERE T1.ID = ST3.ID
    ORDER BY ST3.Value3
    LIMIT 1
  ) AS Value3 
FROM Table1 AS T1