Maison >base de données >tutoriel mysql >Comment supprimer les enregistrements en double dans SQL Server en fonction d'un champ spécifique à l'aide d'une seule requête ?

Comment supprimer les enregistrements en double dans SQL Server en fonction d'un champ spécifique à l'aide d'une seule requête ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-12 12:06:44543parcourir

How to Delete Duplicate Records in SQL Server Based on a Specific Field Using a Single Query?

Supprimer les enregistrements en double dans SQL Server en fonction de champs spécifiques

Supposons qu'il existe une table nommée "Employee" qui contient une colonne nommée "EmployeeName". La tâche consiste à supprimer les enregistrements redondants en fonction du champ « EmployeeName » et à obtenir les données suivantes :

EmployeeName
Anand
Anil
Dipak

Comment puis-je y parvenir avec une seule requête utilisant TSQL dans SQL Server ?

Solution utilisant les fonctions de fenêtre :

Pour résoudre ce problème, la fonction fenêtre est une méthode réalisable. Les fonctions de fenêtre vous permettent d'effectuer des opérations sur un ensemble de lignes au sein d'une partition définie par la clause OVER. Dans cet exemple, la partition est définie par la colonne "EmployeeName".

La requête suivante identifie et supprime efficacement les enregistrements en double en fonction du champ « EmployeeName » :

<code class="language-sql">delete x from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;</code>

Explication :

  • La fonction de fenêtre row_number() est utilisée pour attribuer un rang numérique - à partir de 1 - à chaque enregistrement de chaque partition (défini par EmployeeName).
  • L'instruction delete cible ensuite les lignes avec rn supérieur à 1, qui sont des doublons.

Afficher les enregistrements supprimés :

Pour prévisualiser les enregistrements qui seront supprimés sans exécuter réellement l'instruction de suppression, utilisez la requête de sélection suivante :

<code class="language-sql">select *
from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;</code>

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