Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double dans MySQL tout en conservant un seul enregistrement ?

Comment supprimer efficacement les lignes en double dans MySQL tout en conservant un seul enregistrement ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 13:21:10650parcourir

How to Efficiently Delete Duplicate Rows in MySQL While Keeping One Record?

Supprimer les lignes en double (données en double) dans MySQL

Question :

Comment supprimer les lignes en double d'une table MySQL tout en conservant un seul enregistrement pour chaque valeur unique ?

Exemple :

Considérez les données suivantes dans le tableau des noms :

id name
1 google
2 yahoo
3 msn
4 google
5 google
6 yahoo

Solution :

Attention : Prenez toujours la précaution d'effectuer d'abord cette opération sur une copie de test du tableau.

Pour supprimer toutes les lignes en double (en conserver une) et conserver l'enregistrement avec la valeur d'identifiant la plus basse ou la plus élevée, utilisez la requête suivante :

Conserver la valeur d'identifiant la plus basse :

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name</code>

Conserver la valeur d'identifiant la plus élevée :

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name</code>

Notes supplémentaires :

  • Assurez-vous d'ajouter la condition AND n1.id != n2.id aux deux requêtes pour éviter de supprimer accidentellement toutes les lignes.
  • Cette méthode est coûteuse en calcul et peut interrompre votre connexion si la table est volumineuse.
  • Pour les grandes tables, envisagez d'utiliser INSERT avec DISTINCT comme alternative plus rapide :
<code class="language-sql">INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
    SELECT DISTINCT cellId,attributeId,entityRowId,value
    FROM tableName;</code>

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