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
Libérer: 2025-01-23 01:41:08
original
597 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal