Gre*_*ssy 6 postgresql duplicates multiple-columns
我在postgresql数据库中有一堆数据.我认为两个密钥应该形成一个唯一的对,所以想要在数据库中强制执行.我试试
create unique index key1_key2_idx on table(key1,key2)
Run Code Online (Sandbox Code Playgroud)
但那失败了,告诉我我有重复的条目.
如何找到这些重复的条目,以便我可以删除它们?
bma*_*bma 18
select key1,key2,count(*)
from table
group by key1,key2
having count(*) > 1
order by 3 desc;
Run Code Online (Sandbox Code Playgroud)
查询的关键部分是确定重复项having count(*) > 1
.
在以下链接中有一大堆巧妙的技巧,包括删除重复项的一些示例:http://postgres.cz/wiki/PostgreSQL_SQL_Tricks
假设您只想删除重复项并保留原件,那么接受的答案是不准确的——它也会删除您的原件,并且只保留从一开始就有一个条目的记录。这适用于 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);
Run Code Online (Sandbox Code Playgroud)
https://wiki.postgresql.org/wiki/Deleting_duplicates
归档时间: |
|
查看次数: |
5216 次 |
最近记录: |