【问题标题】:Select Only Non Duplicated Rows (SQL)仅选择非重复行 (SQL)
【发布时间】:2020-10-16 14:11:31
【问题描述】:

当与另一个 SQL 表进行左连接时,我的一些左表行被复制并与多个右表行连接,因为在我的使用中,这意味着这些是不明确的行,我需要能够过滤具有相同的值。

Select Table_1.Id, Table_1.Value, Table_2.Id, Table_2.Value
From Table_1 Left Join Table_2 on Table_1.Value = Table_2.Value

导致:

Table_1.Id,     Table_1.Value,  Table_2.Id,     Table_2.Value
1               T               2               T
2               G               3               G
2               G               5               G
3               K               1               K
4               M               4               M

但是我想创建一个查询结果:

Table_1.Id,     Table_1.Value,  Table_2.Id,     Table_2.Value
1               T               2               T
3               K               1               K
4               M               4               M

由于第 2 行已与 Table_2 中的多行连接,因此它被查询拒绝。

我查看了Finding duplicate values in a SQL table 并能够使用它来查找 Table_1 中的重复项,但不能查找已连接到多个 Table_2 行的行。任何帮助将不胜感激。

【问题讨论】:

  • 请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com & 标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 我的意思是剪切和粘贴 SQL 版本。我将会。但是,如果您关注我的第一条评论,您会发现很多问答都在回答这个问题。显然,我们可以预料,您不是第一个面对这种情况的人。 ...SQL query that gives distinct results that match multiple columns

标签: sql join duplicates


【解决方案1】:

你可以使用count()作为窗口函数:

Select t1.Id, t1.Value, t2.Id, t2.Value
From Table_1 Join
     (select t2.*,
             count(*) over (partition by t2.value) as cnt
      from Table_2 t2
     ) t2
     on t2.Value = t1.Value
where t2.cnt = 1;

根据您的样本数据,left join 似乎不合适。

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2020-11-03
    相关资源
    最近更新 更多