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 ?

Susan Sarandon
Libérer: 2025-01-05 16:53:40
original
621 Les gens l'ont consulté

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

Suppression des enregistrements en double d'une table SQL sans clé primaire

Dans une table SQL sans clé primaire, l'identification et la suppression des enregistrements en double peuvent être une tâche complexe. Le problème survient lorsque plusieurs lignes partagent les mêmes valeurs dans des colonnes spécifiques, créant ainsi des redondances dans les données. Pour résoudre ce problème, nous allons explorer une requête qui élimine efficacement les lignes en double en fonction d'une combinaison de colonnes.

Considérez le tableau suivant nommé « employé » avec les données fournies :

create table employee
(
 EmpId number,
 EmpName varchar2(10),
 EmpSSN varchar2(11)
);

insert into employee values(1, 'Jack', '555-55-5555');
insert into employee values (2, 'Joe', '555-56-5555');
insert into employee values (3, 'Fred', '555-57-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
insert into employee values (1, 'Jack', '555-55-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6 ,'Lisa', '555-70-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
Copier après la connexion

À supprimez les lignes en double basées sur "EmpId" et "EmpSSN", nous pouvons exploiter les éléments suivants requête :

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM Employee) SUB
WHERE SUB.cnt > 1
Copier après la connexion

Explication :

  1. La requête interne calcule le numéro de ligne pour chaque ligne en fonction des colonnes de partitionnement « EmpId », « EmpName » et « EmpSSN ». Cette étape identifie l'ordre des lignes pour chaque combinaison unique de ces champs.
  2. La requête externe supprime ensuite les lignes dont le numéro de ligne « cnt » est supérieur à 1, indiquant qu'il existe des lignes en double pour cette combinaison spécifique.

L'exécution de cette requête supprimerait efficacement les enregistrements en double de la table "employé" tout en préservant l'ordre d'origine des données. Après exécution, la table ne contiendrait que des lignes uniques basées sur les champs "EmpId" et "EmpSSN".

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal