Maison > base de données > tutoriel mysql > le corps du texte

Comment supprimer les adresses e-mail en double dans MySQL tout en conservant l'enregistrement le plus récent ?

Mary-Kate Olsen
Libérer: 2024-11-15 21:51:02
original
596 Les gens l'ont consulté

How to Remove Duplicate Email Addresses in MySQL While Keeping the Most Recent Record?

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 :

  1. 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;
      Copier après la connexion
  2. 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;
      Copier après la connexion
  3. 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;
      Copier après la connexion

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

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

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!

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