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
Libérer: 2025-01-23 01:47:09
original
369 Les gens l'ont consulté

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

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

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

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!

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