Maison >base de données >tutoriel mysql >Comment supprimer les lignes en double dans MySQL tout en en gardant une ?

Comment supprimer les lignes en double dans MySQL tout en en gardant une ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 13:26:10422parcourir

How to Delete Duplicate Rows in MySQL While Keeping One?

Comment supprimer les lignes en double de MySQL (conserver une ligne)

La déduplication est cruciale pour maintenir une base de données propre et efficace. Si la sélection de valeurs uniques à l'aide d'une requête comme SELECT DISTINCT est simple, la suppression des doublons via l'opération DELETE nécessite une approche légèrement différente.

Utilisez DELETE pour supprimer les doublons

Pour supprimer les lignes en double d'une table tout en conservant une copie, vous pouvez utiliser deux DELETE variantes de requête :

  1. Conservez la ligne avec la valeur d'ID 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>
  2. Conservez la ligne avec la valeur d'ID 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>

Notez que ces requêtes utilisent des jointures internes (JOIN) pour comparer les lignes en fonction de la colonne name. Ils identifient et suppriment ensuite les lignes en double en fonction de la condition selon laquelle une ligne a une valeur d'ID supérieure ou inférieure à celle d'une autre ligne.

Remarque :

  • Assurez-vous de créer une copie de test de la table avant d'exécuter ces requêtes, car elles peuvent supprimer toutes les lignes si elles sont mal utilisées.
  • L'inclusion de la condition AND n1.id != n2.id dans la requête garantit que les lignes ne sont pas supprimées si elles ont le même nom mais des valeurs d'ID différentes.

Une alternative à l'utilisation d'INSERT :

Pour les tableaux plus grands, utiliser DISTINCT avec INSERT est un moyen plus efficace de supprimer les doublons.

<code class="language-sql">INSERT INTO tempTableName(cellId, attributeId, entityRowId, value)
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;</code>

Cette méthode crée une nouvelle table contenant uniquement des valeurs uniques, supprimant ainsi efficacement les doublons.

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