我在一个postgresql数据库中有一堆数据。我认为两个键应该形成一个唯一的对,所以想在数据库中强制执行。我试着
create unique index key1_key2_idx on table(key1,key2)
字符串但是失败了,告诉我有重复的条目。如何找到这些重复的条目以便删除它们?
i86rm4rw1#
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
having count(*) > 1
bcs8qyzn2#
假设您只想删除重复项并保留原始项,则接受的答案是不准确的--它也会删除原始项,只保留从一开始就有一个条目的记录。
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
dw1jzc5e3#
select distinct a.* from tbl a inner join tbl b on ( a.id <> b.id and b.col1 = a.col1 and b.col2 = a.col2 ) order by a.col1 asc
字符串
3条答案
按热度按时间i86rm4rw1#
字符串
确定重复项的查询的关键部分是
having count(*) > 1
。在下面的链接中有一大堆整洁的技巧,包括一些删除重复的例子:http://postgres.cz/wiki/PostgreSQL_SQL_Tricks
bcs8qyzn2#
假设您只想删除重复项并保留原始项,则接受的答案是不准确的--它也会删除原始项,只保留从一开始就有一个条目的记录。
字符串
https://wiki.postgresql.org/wiki/Deleting_duplicates
dw1jzc5e3#
字符串