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

MySQLテーブルから重複する値を削除する最良の方法は何ですか?

    まず、ProgramNameフィールドとCustIDフィールドにまだインデックスがない場合は、それらにインデックスを追加してみてください。

    重複排除

    レコードをグループ化して重複を識別することができます。その際、各グループの最小ID値を取得します。次に、IDがMinIDの1つではないすべてのレコードを削除します。

    条項内の方法

    delete from
     ProgramsList
    where
     id not in 
        (select min(id) as MinID
          from ProgramsList
          group by ProgramName, CustID) 
    

    結合方法

    グループごとに多数のメンバーがいる場合は、これを複数回実行する必要がある場合があります。

    DELETE P
    FROM ProgramsList as P
    INNER JOIN 
        (select count(*) as Count, max(id) as MaxID
         from ProgramsList
         group by ProgramName, CustID) as A on A.MaxID = P.id
    WHERE A.Count >= 2
    

    In-Clauseでパフォーマンスの問題を抱えている人もいれば、そうでない人もいます。それはあなたのインデックスなどに大きく依存します。一方が遅すぎる場合は、もう一方を試してください。

    関連: https://stackoverflow.com/a/4192849/127880



    1. jdbcMySQLクエリで0000-00-00の日付を処理する方法

    2. NoSuchMethodErrorの取得:JPAクエリの実行中にjavax.persistence.Table.indexes()

    3. サブクエリにインデックスを付けることはできますか?

    4. MySQL-子行を追加または更新できません:外部キー制約が失敗します