14

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

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

4

4 回答 4

21

尝试本文中描述的步骤:从 PostgreSQL 数据库中删除重复项

它描述了一种情况,即您必须处理无法处理的大量数据group by

一个简单的解决方案是:

DELETE FROM foo
       WHERE id NOT IN (SELECT min(id) --or max(id)
                        FROM foo
                        GROUP BY hash)

哪里hash有重复的东西。

于 2010-09-23T11:06:08.470 回答
2
delete from table
where not id in 
(select max(id) from table group by [duplicate row])

这是您需要保留哪一行的随机(最大值)选择。如果您对此有所了解,请提供更多详细信息

于 2010-09-23T11:06:37.407 回答
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)
于 2010-09-23T11:13:13.460 回答
0
delete from table t1 
where rowid > (SELECT min(rowid) FROM table t2 group by 
               t2.id,t2.name );
于 2019-04-30T05:00:03.960 回答