Maison > base de données > tutoriel mysql > Comment puis-je supprimer efficacement les enregistrements en double d'une table MySQL sans utiliser de tables temporaires ?

Comment puis-je supprimer efficacement les enregistrements en double d'une table MySQL sans utiliser de tables temporaires ?

Susan Sarandon
Libérer: 2025-01-04 03:46:40
original
1070 Les gens l'ont consulté

How Can I Efficiently Remove Duplicate Records from a MySQL Table Without Using Temporary Tables?

Suppression efficace des enregistrements en double dans MySQL sans tables temporaires

Découvrir les enregistrements en double dans une base de données peut être un défi, surtout sans clé primaire . Cependant, il existe des techniques efficaces pour résoudre ce problème.

Dans notre cas, nous avons une table appelée TableA qui contient les réponses des utilisateurs aux questionnaires. En raison d'une erreur accidentelle, certains utilisateurs ont soumis des réponses en double. Notre objectif est de supprimer ces doublons tout en veillant à ce qu'une ligne restante persiste.

Solution 1 : Index unique

Une approche consiste à ajouter un index unique sur les colonnes concernées dans le tableau A. Cela renforcera le caractère unique de ces champs, empêchant l'insertion de doublons supplémentaires.

Pour y parvenir, exécutez la requête suivante :

ALTER IGNORE TABLE `TableA`   
ADD UNIQUE INDEX (`member_id`, `quiz_num`, `question_num`, `answer_num`);
Copier après la connexion

Solution 2 : Clé primaire et suppression

Alternativement, nous pouvons créer une clé primaire sur la table et utiliser une requête spécifique pour identifier et supprimer doublons.

Pour créer une clé primaire, on peut utiliser cette requête :

ALTER TABLE `TableA` ADD PRIMARY KEY (`member_id`, `quiz_num`, `question_num`, `answer_num`);
Copier après la connexion

Une fois la clé primaire en place, on peut supprimer les doublons à l'aide de cette requête :

DELETE FROM member  
WHERE id IN (SELECT * 
             FROM (SELECT id FROM member 
                   GROUP BY member_id, quiz_num, question_num, answer_num HAVING (COUNT(*) > 1)
                  ) AS A
            );
Copier après la connexion

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