我有一堆数据存储在PostgreSQL数据库中。我认为应该有两个键形成一个唯一的对,因此希望在数据库中执行此操作。我尝试
create unique index key1_key2_idx on table(key1,key2)
但是尝试失败了,告诉我有重复的条目。
我该如何找到这些重复的条目以便删除它们呢?
我有一堆数据存储在PostgreSQL数据库中。我认为应该有两个键形成一个唯一的对,因此希望在数据库中执行此操作。我尝试
create unique index key1_key2_idx on table(key1,key2)
但是尝试失败了,告诉我有重复的条目。
我该如何找到这些重复的条目以便删除它们呢?
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
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);
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