私は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)