Cet article explique le processus deffectuer une activité de suppression SQL pour les lignes dupliquées dune table SQL.
Introduction
Nous devons suivre certaines bonnes pratiques lors de la conception dobjets dans SQL Server. Par exemple, une table doit avoir des clés primaires, des colonnes didentité, des index clusterisés et non groupés, des contraintes pour garantir lintégrité et les performances des données. Même nous suivons les meilleures pratiques et nous pourrions être confrontés à des problèmes tels que la duplication de lignes. Nous pourrions également obtenir ces données dans des tables intermédiaires lors de limportation de données, et nous voulons supprimer les lignes en double avant de les insérer réellement dans les tables de production.
Supposons que votre table SQL contienne des lignes en double et que vous souhaitiez supprimer ces lignes en double . Plusieurs fois, nous sommes confrontés à ces problèmes. Il est également recommandé dutiliser les clés appropriées, des contraintes pour éliminer la possibilité de doublons de lignes si nous avons déjà des lignes en double dans la table. Nous devons suivre des méthodes spécifiques pour nettoyer les données en double. Cet article explore les différentes méthodes pour supprimer les données en double de la table SQL.
Créons un exemple de table Employee et insérons-y quelques enregistrements.
Dans le tableau, nous avons un quelques enregistrements en double, et nous devons les supprimer.
SQL supprime les lignes en double en utilisant Group By et en ayant la clause
Dans cette méthode, nous utilisons la clause SQL GROUP BY pour identifier le doublon Lignes. La clause Group By regroupe les données selon les colonnes définies et nous pouvons utiliser la fonction COUNT pour vérifier loccurrence dune ligne.
Par exemple, exécutez la requête suivante, et nous obtenons ces enregistrements ayant une occurrence supérieure à 1 dans la table Employee.
Dans la sortie ci-dessus, nous avons deux enregistrements en double avec les ID 1 et 3.
- Emp ID 1 a deux occurrences dans la table Employee
- Emp ID 3 a trois occurrences dans la table Employee
Nous devons conserver une seule ligne et supprimez les lignes en double. Nous devons supprimer uniquement les lignes en double de la table. Par exemple, lEmpID 1 apparaît deux fois dans le tableau. Nous voulons supprimer une seule occurrence de celui-ci.
Nous utilisons la fonction SQL MAX pour calculer lID max de chaque ligne de données.
Dans la capture décran suivante, nous pouvons voir que le ci-dessus, linstruction Select exclut lID Max de chaque ligne en double et nous obtenons uniquement la valeur dID minimum.
Pour supprimer ces données, remplacez le Sélectionnez dabord avec linstruction de suppression SQL selon la requête suivante.
Une fois que vous avez exécuté linstruction de suppression, effectuez une sélection sur une table Employee, et nous obtenons les enregistrements suivants qui ne contiennent pas de lignes en double.
SQL supprime les lignes en double à laide dexpressions de table communes (CTE)
Nous pouvons utiliser des expressions de table communes communément appelées CTE pour supprimer les lignes en double dans SQL Server. Il est disponible à partir de SQL Server 2005.
Nous utilisons une fonction SQL ROW_NUMBER, et il ajoute un numéro de ligne séquentiel unique pour la ligne.
Dans le CTE suivant, il partitionne le données en utilisant la clause PARTITION BY pour la colonne, et et génère un numéro de ligne pour chaque ligne.
Dans la sortie, si une ligne a la valeur de colonne supérieure à 1, cela montre quil sagit dun doublon row.
Nous pouvons supprimer les lignes en double en utilisant le CTE suivant.
Il supprime les lignes ayant une valeur supérieure à 1
Fonction RANK pour SQL supprimer les lignes dupliquées
Nous pouvons également utiliser la fonction SQL RANK pour supprimer les lignes dupliquées. La fonction SQL RANK donne un ID de ligne unique pour chaque ligne indépendamment de la ligne dupliquée.
Dans la requête suivante, nous utilisons une fonction RANK avec la clause PARTITION BY. La clause PARTITION BY prépare un sous-ensemble de données pour les colonnes spécifiées et donne le rang pour cette partition.
Dans la capture décran, vous pouvez noter que nous devons supprimer la ligne dont le rang est supérieur à un. Supprimons ces lignes à laide de la requête suivante.
Utilisez le package SSIS pour supprimer les lignes en double SQL
Le service dintégration SQL Server fournit diverses transformations, opérateurs qui aident les administrateurs et les développeurs à réduire les efforts manuels et optimisez les tâches. Le package SSIS peut également supprimer les lignes dupliquées dune table SQL.
Utilisez lopérateur de tri dans un package SSIS pour supprimer les lignes dupliquées
Nous pouvons utiliser un opérateur de tri pour trier les valeurs dans une table SQL. Vous pourriez vous demander comment le tri des données peut supprimer les lignes en double?
Créons le package SSIS pour afficher cette tâche.
- Dans SQL Server Data Tools, créez un nouveau package dintégration.Dans le nouveau package, ajoutez une connexion source OLE DB
-
Ouvrez léditeur de source OLE DB et configurez la connexion source et sélectionnez la table de destination
-
Cliquez sur Aperçu des données et vous pouvez voir que nous avons encore des données en double dans la table source
-
Ajoutez un opérateur de tri de la boîte à outils SSIS pour lopération de suppression SQL et joignez-le aux données source
Pour la configuration de lopérateur de tri, double-cliquez dessus et sélectionnez les colonnes contenant des valeurs en double. Dans notre cas, la valeur en double est dans les colonnes,,.
Nous pouvons également utiliser les types de tri croissant ou décroissant pour les colonnes. La méthode de tri par défaut est ascendante. Dans lordre de tri, nous pouvons choisir lordre de tri des colonnes. Lordre de tri 1 montre la colonne qui sera triée en premier.
En bas à gauche, notez une case à cocher Supprimer les lignes avec dupliquer les valeurs de tri.
Il fera la tâche de supprimer les lignes en double pour nous des données source. Cochez cette case et cliquez sur OK. Il effectue lactivité de suppression SQL dans le package SSIS.
Une fois que nous avons cliqué sur OK, il revient à longlet de flux de données, et nous pouvons voir le package SSIS suivant.
Nous pouvons ajouter des destinations SQL Server pour stocker les données après avoir supprimé les lignes en double. Nous voulons uniquement vérifier que lopérateur de tri effectue la tâche pour nous ou non.
Ajoutez une transformation SQL Multicast à partir de la boîte à outils SSIS comme indiqué ci-dessous.
Pour afficher les données distinctes, cliquez avec le bouton droit sur le connecteur entre Tri et Multidiffusion. Cliquez sur Activer la visionneuse de données.
Le package SSIS global ressemble à ci-dessous.
Exécutez le package pour effectuer lopération de suppression SQL. Il ouvre la visionneuse de données de sortie de tri à la tâche de flux de données. Dans cette visionneuse de données, vous pouvez voir des données distinctes après avoir supprimé les valeurs en double.
Fermez ceci et le package SSIS saffiche avec succès exécuté.
Conclusion
Dans cet article, nous avons exploré le processus de suppression de lignes en double par SQL en utilisant diverses manières telles que T-SQL, CTE et package SSIS. Vous pouvez utiliser la méthode dans laquelle vous vous sentez à laise. Cependant, je suggérerais de ne pas mettre en œuvre ces procédures et de regrouper directement les données de production. Vous devriez tester dans un environnement inférieur.
- Auteur
- Messages récents
Il est le créateur de lune des plus grandes collections darticles en ligne gratuits sur un seul sujet, avec sa série de 50 articles sur les groupes de disponibilité SQL Server Always On. Sur la base de sa contribution à la communauté SQL Server, il a été récompensé par divers prix dont le prestigieux « Meilleur auteur de lannée » en continu en 2020 et 2021 chez SQLShack.
Raj est toujours intéressé par de nouveaux défis, donc si vous avez besoin de conseil aide sur tout sujet traité dans ses écrits, il peut être contacté à [email protected]
Voir tous les articles de Rajendra Gupta
- Mise à niveau des versions mineures et majeures pour AWS RDS SQL Server – 29 janvier 2021
- Déploiement des instances AWS RDS PostgreSQL – 27 janvier 2021
- Migration de vos bases de données SQL sur site vers AWS RDS SQL Server à laide dAWS DMS – 25 janvier , 2021