ホームページ >データベース >mysql チュートリアル >MySQL で最新のレコードを保持したまま重複レコードを削除するにはどうすればよいですか?

MySQL で最新のレコードを保持したまま重複レコードを削除するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 12:50:03261ブラウズ

How to Delete Duplicate Records in MySQL While Keeping the Latest?

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

データベースでは、特に一意の識別子を持つテーブルで重複レコードが発生することがよくあります。 。 MySQL では、電子メールが重複し、最新の ID を持つ最新の電子メールのみを保持したいという状況に直面することがあります。

この問題を解決するには、次の手順を実行できます。

  1. 重複するメールの特定: に複数回表示されるメールを特定します。テーブル。
  2. 各重複電子メールの最新 ID を検索します。 重複電子メールごとに、最新の挿入を表す最大の ID を取得します。
  3. 削除古い ID の重複: 前の手順で特定された最新のものを除くすべての重複を削除します。 step.

実装:

列 id と email を持つ test という名前の次の MySQL テーブルを考えます:

| id | email |
|---|---|
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | bbb |
| 5 | ddd |
| 6 | eee |
| 7 | aaa |
| 8 | aaa |
| 9 | eee |

重複を削除するにはメールを保存し、最新のメールを保持するには、次のことを実行できます。 query:

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;

このクエリは、重複電子メールの最新の ID を取得し、古い ID を持つすべての重複を削除します。クエリを実行すると、テスト テーブルは次のように表示されます。

| id | email |
|---|---|
| 3 | ccc |
| 4 | bbb |
| 5 | ddd |
| 8 | aaa |
| 9 | eee |

最も高い ID を持つ最新の重複のみが保存され、テーブル内の最新の電子メール アドレスを維持するという要件を満たしています。

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

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