Maison >base de données >tutoriel mysql >Comment puis-je supprimer les lignes en double dans un tableau tout en préservant la première occurrence de chaque combinaison unique ?

Comment puis-je supprimer les lignes en double dans un tableau tout en préservant la première occurrence de chaque combinaison unique ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 01:31:10888parcourir

How Can I Delete Duplicate Rows in a Table While Preserving the First Occurrence of Each Unique Combination?

Conserver les lignes uniques : gérer la suppression des doublons

Dans le domaine des opérations de bases de données, il est souvent nécessaire de supprimer les lignes en double des tables. Cependant, cette tâche peut devenir difficile lorsque les lignes manquent d'identifiants uniques. Cette question traite de cette situation, cherchant une solution pour éliminer les lignes en double tout en conservant la première occurrence de chaque combinaison unique.

Requête :

La requête initialement fournie tente de supprimer des lignes en fonction de la présence de valeurs d'identifiant en double. Cependant, cette méthode échoue car aucun identifiant unique de ce type n’existe dans la table. Au lieu de cela, une solution plus robuste est nécessaire pour gérer la détection et la suppression des doublons sans s'appuyer sur des identifiants de ligne explicites.

Utilisez CTE et ROW_NUMBER :

Un moyen efficace d'y parvenir consiste à utiliser une expression de table commune (CTE) en conjonction avec la fonction ROW_NUMBER(). La technique CTE crée une table temporaire CTE qui contient la colonne d'origine et une colonne supplémentaire RN qui représente le numéro de ligne pour chaque combinaison de valeurs col1.

Partition et numéro :

La fonction

ROW_NUMBER() permet de partitionner les lignes en fonction de la colonne col1 et d'attribuer des numéros de ligne par ordre croissant dans chaque partition. Par conséquent, les lignes en double au sein de la même partition auront des valeurs RN uniques supérieures à 1.

Processus de suppression :

En tirant parti du CTE, nous pouvons isoler et supprimer toutes les lignes avec une valeur RN supérieure à 1, supprimant ainsi efficacement les doublons tout en conservant la première instance de chaque combinaison unique.

Résultat :

Après application de la requête modifiée, les résultats attendus sont obtenus :

<code>COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2</code>

Fonctions étendues :

Les requêtes peuvent être davantage personnalisées pour gérer la détection et la suppression des doublons sur plusieurs colonnes en ajoutant simplement ces colonnes à la clause PARTITION BY. Par exemple, pour considérer col1 et col2 pour une identification en double, la clause PARTITION BY deviendrait :

<code>ROW_NUMBER()OVER(PARTITION BY Col1, Col2 ORDER BY OrderColumn)</code>

Cette méthode fournit un moyen fiable et efficace d'éliminer les lignes en double en fonction des colonnes sélectionnées, offrant ainsi une flexibilité d'adaptation aux différents besoins en données.

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