Suppression efficace des enregistrements en double dans MySQL avec la dernière conservation de l'ID
Problème :
Dans une table MySQL avec à la fois des champs d'ID unique et de courrier électronique, des adresses e-mail en double apparaissent. La tâche consiste à éliminer toutes les instances, sauf la dernière (la plus récemment insérée), de chaque e-mail en double tout en préservant son identifiant unique.
Solution :
Le problème peut être résolu grâce à un processus en deux étapes qui identifie et élimine les e-mails en double.
Étape 1 : Identifier les e-mails en double. E-mails
select email from test group by email having count(*) > 1;
Cette requête renvoie la liste de tous les e-mails qui apparaissent plus d'une fois dans le tableau.
Étape 2 : Isoler et supprimer les enregistrements en double
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;
Cette requête effectue une jointure gauche entre la table principale (test) et une sous-requête (duplicata) qui contient les derniers identifiants pour chaque e-mail en double. Il supprime ensuite tous les enregistrements en double avec des identifiants inférieurs au dernier identifiant, préservant ainsi uniquement l'instance la plus récemment insérée de chaque e-mail.
Solution alternative :
Une solution plus concise et une solution efficace est fournie ci-dessous :
delete from test where id not in ( select max(id) from test group by email );
Cette requête identifie et supprime tous les enregistrements qui ne sont pas les dernières instances de doublon. e-mails.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!