Maison >base de données >tutoriel mysql >Comment puis-je supprimer les enregistrements en double dans MySQL en conservant la dernière entrée pour chaque e-mail ?

Comment puis-je supprimer les enregistrements en double dans MySQL en conservant la dernière entrée pour chaque e-mail ?

DDD
DDDoriginal
2024-11-16 02:28:03611parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn