我有一个名为“ user_links”的PostgreSQL数据库表,该表当前允许以下重复字段:
year, user_id, sid, cid
唯一的限制是目前所谓的“ID”的第一场,但是我现在希望增加一个约束,以确保year,user_id,sid和cid都是独一无二的,但由于重复的值已存在违反此约束我不能应用约束。
year
user_id
sid
cid
有没有办法找到所有重复项?
基本思想是将嵌套查询与计数聚合一起使用:
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