Maison >base de données >tutoriel mysql >Comment supprimer les lignes en double d'une table SQL sans clé primaire ?

Comment supprimer les lignes en double d'une table SQL sans clé primaire ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 02:35:39356parcourir

How to Remove Duplicate Rows from a SQL Table Without a Primary Key?

Comment supprimer les enregistrements en double d'une table SQL sans clé primaire

Lorsque vous traitez des tables SQL dépourvues de clé primaire, gestion des doublons les dossiers peuvent poser un défi. Cependant, il existe des méthodes efficaces pour éliminer les doublons en fonction de critères spécifiques.

Considérez le scénario suivant : vous disposez d'une table « employé » avec les colonnes « EmpId », « EmpName » et « EmpSSN » et quelques enregistrements. contiennent des valeurs en double dans les champs « EmpId » et « EmpSSN ». Pour supprimer ces doublons, vous pouvez utiliser la requête suivante :

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM employee) SUB
WHERE SUB.cnt > 1

Comprendre la requête :

  • L'instruction DELETE externe supprime les lignes de l'employé ' basée sur les informations extraites de la sous-requête.
  • La sous-requête calcule un nombre de lignes (cnt) pour chaque combinaison unique de « EmpId », « EmpName » et « EmpSSN ».
  • La clause PARTITION BY regroupe les enregistrements par ces champs pour garantir que le nombre de lignes est réinitialisé pour chaque groupe distinct.
  • La clause ORDER BY trie les enregistrements au sein de chaque groupe pour garantir que la première ligne est l'enregistrement d'origine.
  • La clause WHERE de la sous-requête filtre lignes avec un cnt supérieur à 1, indiquant qu'il s'agit de doublons.
  • L'instruction DELETE externe utilise ensuite la clause FROM pour référencer la sous-requête en tant que table virtuelle (SUB) et supprime ces lignes de l'employé principal ' table.

Cette requête supprime efficacement les enregistrements en double en fonction de la combinaison unique de « EmpId » et « EmpSSN », exécutant efficacement les données. nettoyage dans les tables sans clé primaire.

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