Maison >base de données >tutoriel mysql >Comment supprimer les lignes en double dans une table sans identifiant unique ?

Comment supprimer les lignes en double dans une table sans identifiant unique ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 01:47:09399parcourir

How to Delete Duplicate Rows in a Table Without a Unique ID?

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 :

  • Le CTE nommé "CTE" utilise la fonction ROW_NUMBER() pour calculer le numéro de ligne en fonction de chaque valeur distincte de la colonne "col1" lors du partitionnement par cette colonne.
  • L'instruction
  • DELETE supprime ensuite les lignes dont le numéro de ligne (RN) est supérieur à 1, supprimant ainsi toutes les lignes en double.

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!

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