最新の 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 サイトの他の関連記事を参照してください。