我正在使用postgres。 我想删除重复行。 条件是,不会删除重复行集中的1个副本。
即:如果有5个重复记录,则其中4个将被删除。
答案 0 :(得分:18)
尝试本文中介绍的步骤:Removing duplicates from a PostgreSQL database。
它描述了当您必须处理无法group by
的大量数据时的情况。
一个简单的解决方案是:
DELETE FROM foo
WHERE id NOT IN (SELECT min(id) --or max(id)
FROM foo
GROUP BY hash)
其中hash
是重复的内容。
答案 1 :(得分:2)
delete from table
where not id in
(select max(id) from table group by [duplicate row])
这是随机(最大值)选择您需要保留的行。 如果您有聚合,请提供更多详细信息
答案 2 :(得分:1)
最快的是加入同一张桌子。 http://www.postgresql.org/docs/8.1/interactive/sql-delete.html
CREATE TABLE test(id INT,id2 INT);
CREATE TABLE
mapy=# INSERT INTO test VALUES(1,2);
INSERT 0 1
mapy=# INSERT INTO test VALUES(1,3);
INSERT 0 1
mapy=# INSERT INTO test VALUES(1,4);
INSERT 0 1
DELETE FROM test t1 USING test t2 WHERE t1.id=t2.id AND t1.id2<t2.id2;
DELETE 2
mapy=# SELECT * FROM test;
id | id2
----+-----
1 | 4
(1 row)
答案 3 :(得分:0)
delete from table t1
where rowid > (SELECT min(rowid) FROM table t2 group by
t2.id,t2.name );