Supprimer les lignes en double sans identifiant unique
Comment pouvons-nous supprimer les lignes en double s'il n'y a pas d'identifiant de ligne unique dans le tableau ? Disons que nous avons un tableau avec les données suivantes :
<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 | |---|---|---|---|---|---|---| | john | 1 | 1 | 1 | 1 | 1 | 1 | | john | 1 | 1 | 1 | 1 | 1 | 1 | | sally | 2 | 2 | 2 | 2 | 2 | 2 | | sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>
Notre objectif est d'éliminer les lignes en double, laissant :
<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 | |---|---|---|---|---|---|---| | john | 1 | 1 | 1 | 1 | 1 | 1 | | sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>
Un moyen fiable d'éviter le problème des identifiants uniques manquants consiste à utiliser des expressions de table communes (CTE) et la fonction ROW_NUMBER(). Cette combinaison nous permet d'identifier quelles lignes doivent être supprimées :
<code class="language-sql">WITH CTE AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1</code>
Décomposons cette requête :
Remarque : Les résultats que vous fournissez dans votre message d'origine peuvent varier en raison d'éventuelles fautes de frappe. La sortie ci-dessus représente le résultat attendu.
La flexibilité de cette technique permet l'inclusion de plusieurs colonnes dans la clause PARTITION BY, permettant la détection des doublons en fonction de plusieurs combinaisons de critères.
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!