Supprimez efficacement les lignes en double sans identifiants uniques
La suppression des doublons peut être un défi lorsqu'une table de données ne dispose pas d'identifiants de ligne uniques. Cet article fournit une solution efficace pour supprimer les lignes en double tout en conservant la première occurrence de la ligne.
Regardons un tableau avec des lignes en double :
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 |
Le résultat souhaité après suppression des lignes en double est :
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
Solution utilisant CTE et ROW_NUMBER
Cette méthode utilise l'expression de table commune (CTE) et la fonction ROW_NUMBER(). CTE attribue à chaque ligne un numéro de séquence (RN) basé sur un ordre spécifique, nous permettant d'identifier et d'éliminer les doublons.
Voici la requête SQL avec des instructions étape par étape :
<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) -- 为 col1 定义的每个组内分配序列号 FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>
Instructions :
Sortie :
Après l'exécution de la requête, la table mise à jour contiendra :
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
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!