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
562 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!

source:php.cn
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