【问题标题】:SQL - Find duplicate records that meet certain conditionsSQL - 查找满足特定条件的重复记录
【发布时间】:2018-07-27 16:39:31
【问题描述】:

我有下表,我正在尝试使用 external_id 列和其他字段上的 WHERE 子句来获取重复项。因此,我试图获取具有相同 external_id 但也具有相同用户和相同团队的行。从下表中,我试图获取记录 1 和 3 的 external_ids。

id | external_id | user | team --------+-------------+----------------+------------ 1 | 5 | A | alpha 2 | 6 | B | beta 3 | 5 | A | alpha 4 | 7 | B | sigma 5 | 5 | A | delta

到目前为止,我设法使用下面的查询在 external_id 字段上获取重复项,并且我正在获取记录:1、3 和 5 作为由 external_id 列分组的计数。我不想要记录 5,我还希望查询返回整行而不是计数。

           select 
              external_id, count(external_id) 
            from 
              table 
            group by 
              external_id 
            having 
              count(external_id)>1;

我不知道如何进一步过滤结果以仅获取重复记录,即用户和团队也相同。请帮忙。

【问题讨论】:

    标签: sql duplicates where-clause


    【解决方案1】:

    由于您要寻找所有三个字段都相同,请将另外两个字段添加到 GROUP BY

    SELECT
      external_id, user, team, COUNT(external_id) 
    FROM
      table 
    GROUP BY
      external_id, user, team
    HAVING
      COUNT(external_id) > 1
    

    这样,external_id 相同但user 和/或team 不同的记录甚至不会进入同一组,而是会被HAVING 子句过滤。

    【讨论】:

      【解决方案2】:

      您可以对计数 >1 使用子查询,例如

        select * from my_table  
        where  (external_id, user,team) in (
          select external_id ,   user ,team
          from my_table 
          group by external_id ,   user ,team 
          having count(*) >1
      
        )
      

      或者你可以在子选择上使用内部连接

      select * from my_table  a
      inner join (
         select external_id ,   user ,team
          from my_table 
          group by external_id ,   user ,team 
          having count(*) >1 ) t on t.external_id = a.external_id 
                       and t.user = a.user and t.team = a.team
      

      【讨论】:

      • 引擎可能会在幕后处理这个问题,具体取决于您使用的内容,但我会在内部查询中选择 null。此外,根据引擎,它作为连接运行可能会更好。
      • @JoeC 正确.. 评论.. 我也根据您的建议更新了答案..
      猜你喜欢
      • 2020-05-20
      • 2022-12-06
      • 2021-08-03
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多