复制多列条目postgresql

时间:2013-07-05 15:07:05

标签: postgresql duplicates multiple-columns

我在postgresql数据库中有一堆数据。我认为两个键应该组成一个独特的对, 所以想在数据库中强制执行。我试试

create unique index key1_key2_idx on table(key1,key2)

但是失败了,告诉我我有重复的条目。

如何找到这些重复的条目,以便删除它们?

2 个答案:

答案 0 :(得分:17)

select key1,key2,count(*)
from table
group by key1,key2
having count(*) > 1
order by 3 desc;

确定重复项的查询的关键部分是having count(*) > 1

以下链接中有大量巧妙的技巧,包括删除重复项的一些示例:http://postgres.cz/wiki/PostgreSQL_SQL_Tricks

答案 1 :(得分:2)

假设您只想删除重复项并保留原件,则接受的答案是不准确的 - 它也会删除您的原件,并且只保留从一开始就有一个条目的记录。这适用于9.x:

SELECT * FROM tblname WHERE ctid IN 
(SELECT ctid FROM 
  (SELECT ctid, ROW_NUMBER() OVER 
    (partition BY col1, col2, col3 ORDER BY ctid) AS rnum 
  FROM tblname) t
WHERE t.rnum > 1);

https://wiki.postgresql.org/wiki/Deleting_duplicates