我有下表,我正在尝试使用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;
我不知道如何进一步过滤结果以获得只有重复记录的用户和团队也是相同的。请帮忙。
答案 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