Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double d'une table sans identifiants uniques ?

Comment supprimer efficacement les lignes en double d'une table sans identifiants uniques ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-23 01:41:08660parcourir

How to Efficiently Remove Duplicate Rows from a Table Without Unique Identifiers?

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 :

  • Création CTE : L'instruction WITH crée un CTE nommé CTE qui contient les colonnes du tableau et attribue des valeurs RN à chaque ligne à l'aide de la fonction ROW_NUMBER(). La clause PARTITION BY regroupe les lignes en fonction de la colonne col1 et les trie dans chaque groupe pour déterminer l'ordre.
  • Fonction
  • ROW_NUMBER() : La fonction ROW_NUMBER() génère une séquence d'entiers commençant à 1 pour chaque ligne de chaque partition définie par la clause PARTITION BY.
  • Opération de suppression : L'instruction DELETE supprime les lignes avec un RN supérieur à 1 dans le CTE, éliminant ainsi les lignes en double.

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!

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