【问题标题】:check for duplicates in sql检查sql中的重复项
【发布时间】:2020-08-25 13:28:46
【问题描述】:

我正在加入两个表 A 和 B。我的查询看起来像这样。

select id, name, sum(qty) 
from table 1 
left join table 2 on table1.id = table2.id and table2.column = XXXX
group by 1,2

我想知道这个连接是否在表 1 中创建了任何重复的行。

我正在使用 teradata SQL

【问题讨论】:

  • 你好,jahan,欢迎来到 Stack Overflow。您的查询不是有效的 SQL。请提供示例数据和所需的结果(作为表格文本),以便可以尝试解决此问题。您还应该使用您正在使用的数据库标记您的问题:mysql、oracle、sql-server...?
  • 首先,您使用的是什么 RDBMS?如果是一个非常模糊的术语,那么术语重复,在你的结果集中什么被认为是重复的? 2个同名? 2 个相同的 ID 或 2 个相同的 Id 和 Name 集?
  • 对不起,这是我的第一篇文章,我使用的是 teradata sql。只有id是相同的,没有别的。基本上我要寻找的是,如何编写查询来检查表 2 上的连接是否在表 1 中的唯一相同列 ID 上创建重复行。
  • @GMB,我知道我错过了 1,2 分组,我没有看到编辑查询的编辑选项 :)

标签: sql join group-by duplicates teradata


【解决方案1】:

我了解到您想知道table2 中是否存在多个与您的连接条件相匹配的行。这是一个用于此目的的查询:

select t2.id
from table2 t2
where 
    t2.colum = 'XXXX'
    and exists (select 1 from table1 t1 where t1.id = t2.id)
group by t2.id
having count(*) > 1

该查询返回的任何行都会复制现有联接中的行。

【讨论】:

    【解决方案2】:

    一种方法可能类似于

    select id, name, sum(qty) 
    from table 1 as t1
    left join table 2 as t2 on table1.id = table2.id and table2.column = XXXX
    where t1.id in (select distinct id from table 1 )
    

    Distinct 检查行区分,您提到唯一需要检查重复的列是 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2015-09-08
      • 1970-01-01
      • 2017-09-16
      • 2010-09-07
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多