删除重复的行(不要删除所有重复的)
我正在使用postgres。 我想删除重复的行。 条件是,从一组重复行中的1个副本不会被删除。
即:如果有5个重复logging,则其中4个将被删除。
尝试本文中描述的步骤: 从PostgreSQL数据库中删除重复项 。
它描述了一个情况,当你必须处理大量的数据,这是不可能的group by
。
一个简单的解决scheme是这样的:
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])
这是随机(最大值)select哪一行你需要保持。 如果你有这个细节,请提供更多细节
最快的是join到同一张表中。 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)