删除重复的行(不要删除所有重复的行)

时间:2010-09-23 11:00:48

标签: sql postgresql duplicate-removal

我正在使用postgres。 我想删除重复行。 条件是,不会删除重复行集中的1个副本。

即:如果有5个重复记录,则其中4个将被删除。

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 );