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

MySQL で重複レコードを削除し、各メールの最新エントリを維持するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-16 02:28:03558ブラウズ

How Can I Delete Duplicate Records in MySQL Keeping the Latest Entry for Each Email?

最新の ID を保持した MySQL の重複レコードの効果的な削除

問題:

一意の ID フィールドと電子メール フィールドの両方を持つ MySQL テーブルでは、重複した電子メール アドレスが発生します。タスクは、一意の ID を保持しながら、各重複電子メールの最新 (最後に挿入された) インスタンスを除くすべてのインスタンスを削除することです。

解決策:

問題は解決できます。重複するメールを特定して削除する 2 段階のプロセスを通じて行います。

ステップ 1: 重複するメールを特定する

select email 
from test
group by email
having count(*) > 1;

このクエリは、表示されるすべてのメールのリストを返します。

ステップ 2: 重複レコードの分離と削除

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;

このクエリは、メイン テーブル (テスト) とテーブルの間で左結合を実行します。各重複電子メールの最新の ID を含むサブクエリ (重複)。次に、最新の ID よりも小さい ID を持つ重複レコードをすべて削除し、各電子メールの最後に挿入されたインスタンスのみを効果的に保存します。

代替解決策:

より簡潔な方法効率的な解決策を以下に示します:

delete from test
where id not in (
  select max(id)
  from test
  group by email
);

このクエリは、重複電子メールの最新のインスタンスではないすべてのレコードを特定して削除します。

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

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