MySQL : Supprimer les enregistrements en double tout en conservant les plus récents
Question : Comment puis-je éliminer les adresses e-mail en double dans une table MySQL tout en préservant la plus récente en fonction du champ ID unique ?
Solution :
Pour y parvenir, suivez ces étapes :
Identifier les e-mails en double :
Récupérez une liste de toutes les adresses e-mail en double à l'aide de la requête :
SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1;
Trouver le dernier identifiant pour chaque doublon :
Déterminez le dernier identifiant associé à chaque e-mail en double à l'aide de la requête :
SELECT MAX(id) AS lastID, email FROM test WHERE email IN ( SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1 ) GROUP BY email;
Supprimer les doublons les plus anciens :
Effectuez une opération DELETE pour supprimer les doublons e-mails avec un identifiant inférieur au dernier :
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;
Version optimisée :
La version optimisée suivante fournit le même résultat tout en améliorant potentiellement les performances :
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;
Cette instruction DELETE révisée se concentre sur l'élimination des doublons les plus anciens.
Option supplémentaire :
Alternativement, vous pouvez utiliser cette requête fournie par René Limon :
DELETE FROM test WHERE id NOT IN ( SELECT MAX(id) FROM test GROUP BY email);
Cette approche conserve l'adresse e-mail en double la plus récente en fonction de l'ID maximum.
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!