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
我在下面有 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