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

重複するエントリを削除するにはどうすればよいですか?

    これらのアプローチのいくつかは少し複雑に見えます、そして私は一般的にこれを次のように行います:

    与えられたテーブルtable 、最大field3で行を維持しながら(field1、field2)で一意にしたい:

    DELETE FROM table USING table alias 
      WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
        table.max_field < alias.max_field
    

    たとえば、user_accountsというテーブルがあります。 、および電子メールに一意の制約を追加したいのですが、重複がいくつかあります。また、最近作成したもの(重複の最大ID)を保持したいとします。

    DELETE FROM user_accounts USING user_accounts ua2
      WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
    
    • 注-USING は標準のSQLではなく、PostgreSQLの拡張機能です(ただし、非常に便利な拡張機能です)が、元の質問では特にPostgreSQLについて言及しています。


    1. SQLステートメントのフィールドから先行ゼロを削除する

    2. SQLServerのアクティブなセッションとステータス

    3. 長期プロジェクトでのタイムゾーンの導入についての詳細

    4. 2016年に登場するOracle12.2.0.1