- ベストアンサー
delete文について
PostgreSQLを使用しています。 あるテーブルに重複したデータが4つ存在します。ユニークなキーは付いていません(全く同じデータです。)。 deleteで削除すると、4つ削除されますが、1つだけを残し、あとの3つだけを削除する方法は有りますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
対象のテーブルに OID が存在する場合は、下記の様なSQLでできると思います。 DELETE FROM target_table WHERE col1 = 1 AND col2 = 2 AND oid != ( SELECT MIN(oid) FROM target_table WHERE col1 = 1 AND col2 = 2 ); 8.1 以降だと、テーブル作成時に WITH OIDS が指定されているか、default_with_oids設定変数が有効でなければ、OIDは追加されません。8.0 以前では、テーブルの作成時に WITHOUT OIDS が指定されているか、default_with_oids設定変数が偽に設定されていなければ、OIDシステム列がOIDが追加されます。 http://www.postgresql.jp/document/pg836doc/html/datatype-oid.html 対象のテーブルにOIDが無い場合は、いったん全てDELETEした後に1つだけINSERTし直すしかないかと。