sql >> データベース >  >> RDS >> PostgreSQL

一意のキーを使用せずにテーブルから重複する行を削除する

    テーブル全体を書き直す余裕がある場合、これはおそらく最も簡単なアプローチです:

    WITH Deleted AS (
      DELETE FROM discogs.releases_labels
      RETURNING *
    )
    INSERT INTO discogs.releases_labels
    SELECT DISTINCT * FROM Deleted
    

    複製されたレコードを具体的にターゲットにする必要がある場合は、内部のctidを利用できます。 行を一意に識別するフィールド:

    DELETE FROM discogs.releases_labels
    WHERE ctid NOT IN (
      SELECT MIN(ctid)
      FROM discogs.releases_labels
      GROUP BY label, release_id, catno
    )
    

    ctidには十分注意してください;時間の経過とともに変化します。ただし、1つのステートメントの範囲内で同じままであると信頼できます。



    1. MySQL JOIN、GROUP BY、ORDER BY

    2. 異なるデータベース間で外部キー制約を維持する方法は?

    3. 外部キー制約付きテーブルを切り捨てる方法は?

    4. HibernateOracleシーケンスは大きなギャップを生成します