SQL - 查找满足特定条件的重复记录

时间:2018-02-16 17:54:30

标签: sql duplicates where-clause

我有下表,我正在尝试使用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;

我不知道如何进一步过滤结果以获得只有重复记录的用户和团队也是相同的。请帮忙。

2 个答案:

答案 0 :(得分:2)

由于您要查找所有三个字段相同,请将另外两个字段添加到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甚至不会使它成为同一组,并且会被{{1 }。clause。

答案 1 :(得分:1)

您可以在有计数> 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

  )

或者您可以使用subselect上的内部联接

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