我正在使用postgres。我想删除重复的行。条件是,不会删除重复行集中的 1 个副本。
即:如果有 5 条重复记录,则其中 4 条将被删除。
我正在使用postgres。我想删除重复的行。条件是,不会删除重复行集中的 1 个副本。
即:如果有 5 条重复记录,则其中 4 条将被删除。
尝试本文中描述的步骤:从 PostgreSQL 数据库中删除重复项。
它描述了一种情况,即您必须处理无法处理的大量数据group by
。
一个简单的解决方案是:
DELETE FROM foo
WHERE id NOT IN (SELECT min(id) --or max(id)
FROM foo
GROUP BY hash)
哪里hash
有重复的东西。
delete from table
where not id in
(select max(id) from table group by [duplicate row])
这是您需要保留哪一行的随机(最大值)选择。如果您对此有所了解,请提供更多详细信息
最快的是加入同一张表。 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)
delete from table t1
where rowid > (SELECT min(rowid) FROM table t2 group by
t2.id,t2.name );