【问题标题】:SQL: Join tables excluding duplicates in second tableSQL:联接表,不包括第二个表中的重复项
【发布时间】:2013-10-27 22:52:51
【问题描述】:

我有两个需要连接的表(Table1 和 Table2)。

id 列链接 Table1 和 Table2。

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

  • Table2 有不应显示在输出表中的重复项。

  • 如果 Table2 中的重复行在给定 id 的列中具有 NULL,并且如果 Table2 中的另一行在此列中具有相同 id 的值,则输出表应包含值而不是 NULL。 (即像下面示例中的 id 002 、 003 和 005 )

  • 如果重复行包含给定 id 的同一列的不同值。任何值都可以带入输出表。 (即像下面例子中的id001)

示例:

表 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

感谢您的宝贵时间!

【问题讨论】:

    标签: sql join duplicates subquery no-duplicates


    【解决方案1】:

    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 
    

    【讨论】:

    • @Linger 感谢您的回答。我错过了一些东西。我需要从输出中避免使用 NULL 值。需要做些什么来删除这些? (有问题的更新表)
    • @slayernoah,我不知道我有没有关注你。您是否希望根本不显示带有 NULLS 的记录?或者,您是否希望它们改为显示为 0
    • 我添加了一些我错过了问题的场景。请看这个小提琴:link。输出表中有重复行。
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2018-04-09
    相关资源
    最近更新 更多