重复的多列条目postgresql

x9ybnkn6  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(147)

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

create unique index key1_key2_idx on table(key1,key2)

字符串
但是失败了,告诉我有重复的条目。
如何找到这些重复的条目以便删除它们?

i86rm4rw

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

bcs8qyzn

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

dw1jzc5e

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

字符串

相关问题