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
Libérer: 2024-11-16 02:28:03
original
612 Les gens l'ont consulté

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;
Copier après la connexion

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;
Copier après la connexion

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
);
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal