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 ?
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 fonctionROW_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!