• ベストアンサー

delete文について

PostgreSQLを使用しています。 あるテーブルに重複したデータが4つ存在します。ユニークなキーは付いていません(全く同じデータです。)。 deleteで削除すると、4つ削除されますが、1つだけを残し、あとの3つだけを削除する方法は有りますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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し直すしかないかと。

関連するQ&A