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

SQL - Find duplicate records that meet certain conditions

我在下面有 table,我正在尝试使用 external_id 列和其他字段上的 WHERE 子句来获取重复项。因此,我试图获取具有相同 external_id 但也具有相同用户和相同团队的行。从下面的 table 中,我试图获取记录 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,我还希望查询 return 整行而不是计数。

           select 
              external_id, count(external_id) 
            from 
              table 
            group by 
              external_id 
            having 
              count(external_id)>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 and/or team 不同的记录甚至不会进入同一组,并且会被 HAVING 子句。

您可以在 having count >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