ホームページ >データベース >mysql チュートリアル >最新の記録を保持しながら、MySQL で重複する電子メール アドレスを削除するにはどうすればよいですか?

最新の記録を保持しながら、MySQL で重複する電子メール アドレスを削除するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 21:51:02674ブラウズ

How to Remove Duplicate Email Addresses in MySQL While Keeping the Most Recent Record?

MySQL: 最新のレコードを保持しながら重複レコードを削除する

質問: で重複する電子メール アドレスを削除するにはどうすればよいですか?一意の ID に基づいて最新のテーブルを保持しながら MySQL テーブルを作成するフィールド?

解決策:

これを実現するには、次の手順に従います:

  1. 重複の識別電子メール:

    • クエリを使用して、重複するすべての電子メール アドレスのリストを取得します:

      SELECT email
      FROM test
      GROUP BY email
      HAVING COUNT(*) > 1;
  2. それぞれの最新の ID を見つける重複:

    • クエリを使用して、各重複電子メールに関連付けられた最新の ID を確認します:

      SELECT MAX(id) AS lastID, email
      FROM test
      WHERE email IN (
        SELECT email
        FROM test
        GROUP BY email
        HAVING COUNT(*) > 1
      )
      GROUP BY email;
  3. 最も古いものを削除重複:

    • DELETE 操作を実行して、最新の ID よりも小さい ID を持つ重複メールを削除します:

      DELETE test
      FROM test
      INNER JOIN (
        SELECT MAX(id) AS lastID, email
        FROM test
        WHERE email IN (
          SELECT email
          FROM test
          GROUP BY email
          HAVING COUNT(*) > 1
        )
        GROUP BY email
      ) duplic ON duplic.email = test.email
      WHERE test.id < duplic.lastID;

最適化済みバージョン:

次の最適化されたバージョンは、パフォーマンスを向上させながら同じ結果を提供します:

DELETE test
FROM test
INNER JOIN (
  SELECT MAX(id) AS lastID, email
  FROM test
  GROUP BY email
  HAVING COUNT(*) > 1) duplic ON duplic.email = test.email
WHERE test.id < duplic.lastID;

この改訂された DELETE ステートメントは、最も古い重複を削除することに重点を置いています。

追加オプション:

または、次のクエリを利用することもできます。 Rene Limon:

DELETE FROM test
WHERE id NOT IN (
  SELECT MAX(id)
  FROM test
  GROUP BY email);

このアプローチでは、最大 ID に基づいて最新の重複電子メール アドレスが保持されます。

以上が最新の記録を保持しながら、MySQL で重複する電子メール アドレスを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。