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

MySQLデータベースの重複行の削除

    私はそれを次のようにします:

    1. 既存のテーブルから一時テーブルを作成します:

      CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
      
    2. 必要なレコードだけを一時テーブルに入力します:

      INSERT INTO data_to_keep
      SELECT DISTINCT * FROM table_with_dupes_in_it
      
    3. テーブルを空にします

      TRUNCATE TABLE table_with_dupes_in_it
      
    4. 一時テーブルから元のテーブルにデータを返す

      INSERT INTO table_with_dupes_in_it
      SELECT * FROM data_to_keep;
      
    5. クリーンアップ

      DROP TEMPORARY TABLE data_to_keep
      

    問題のテーブルが大きい場合、これは大量のメモリやストレージを消費する可能性があることに注意してください。大きなテーブルの場合は、DBサーバーのメモリを過剰に消費しないように、一時テーブルではなく実際のテーブルを使用する傾向があります。

    追加する編集:

    部分的な重複(一部のデータのみが以前に入力されたデータと同一である行)が心配な場合は、GROUPBYを使用することをお勧めします。 GROUP BYを使用する場合、MySQLを制限して、すべてではなく、指定されたデータを含む1つの行のみを返すようにすることができます。

    SELECT *
    FROM table
    GROUP BY column_name
    

    また、重複データを保持したくない列にUNIQUEインデックスを使用することを検討する必要があります。これにより、ユーザーは最初から重複データを挿入できなくなります。



    1. SQLでコンマ区切りの文字列を合計するにはどうすればよいですか?

    2. Redshiftで行を分割する

    3. Selectステートメントの使用中にmysqlでvalueキーワードをエスケープする方法

    4. エラーをスローせずにMySQLデータベースのエントリの重複を回避する方法