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 に答える