一尘不染

如何在PostgreSQL中查找重复记录

sql

我有一个名为“ user_links”的PostgreSQL数据库表,该表当前允许以下重复字段:

year, user_id, sid, cid

唯一的限制是目前所谓的“ID”的第一场,但是我现在希望增加一个约束,以确保yearuser_idsidcid都是独一无二的,但由于重复的值已存在违反此约束我不能应用约束。

有没有办法找到所有重复项?


阅读 848

收藏
2021-03-17

共1个答案

一尘不染

基本思想是将嵌套查询与计数聚合一起使用:

select * from yourTable ou
where (select count(*) from yourTable inr
where inr.sid = ou.sid) > 1

您可以调整内部查询中的where子句以缩小搜索范围。


对于注释中提到的问题,还有一个很好的解决方案,(但并非所有人都阅读它们):

select Column1, Column2, count(*)
from yourTable
group by Column1, Column2
HAVING count(*) > 1

或更短:

SELECT (yourTable.*)::text, count(*)
FROM yourTable
GROUP BY yourTable.*
HAVING count(*) > 1
2021-03-17