Comment Supprimer Facilement des Lignes Dupliquées d’une Table SQL Server

Nettoyer votre base de données est essentiel pour maintenir la qualité des données, surtout lorsqu’il s’agit de lignes dupliquées. Si vous travaillez avec une grande table SQL Server—plus de 300 000 lignes, par exemple—vous pourriez rencontrer des doublons que vous aimeriez supprimer. Dans cet article de blog, nous vous guiderons à travers un processus simple pour éliminer efficacement les doublons tout en gardant les données pertinentes intactes.

Comprendre le Problème

Lorsque vous avez une table comme MyTable, qui inclut une clé primaire avec un champ d’identité (RowID), les doublons n’apparaissent pas comme des correspondances parfaites. Au lieu de cela, ils peuvent varier dans une ou plusieurs colonnes non clés, comme Col1, Col2 et Col3. Il est essentiel d’identifier ces doublons de manière astucieuse pour éviter la perte de données tout en garantissant l’intégrité de votre table.

Exemple de Structure de MyTable

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null

La Solution Expliquée

Pour supprimer efficacement les lignes dupliquées tout en conservant la pertinente, vous pouvez utiliser les instructions GROUP BY et les commandes DELETE de SQL Server. Voici les étapes décomposées pour plus de clarté.

Guide Étape par Étape

1. Regroupement et Sélection des Lignes Uniques

La première étape consiste à regrouper les lignes par les colonnes que vous souhaitez vérifier pour les doublons. Dans ce cas, Col1, Col2 et Col3. Vous utiliserez la fonction MIN pour trouver le plus petit RowID pour chaque groupe de doublons, qui vous indiquera quelle ligne conserver.

Voici à quoi pourrait ressembler le code SQL :

SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
FROM MyTable 
GROUP BY Col1, Col2, Col3

2. Supprimer les Doublons

Une fois que vous avez identifié les lignes à conserver, l’étape suivante consiste à supprimer tout ce qui n’a pas de contrepartie dans votre nouvel ensemble KeepRows. Voici le code SQL pour effectuer la suppression :

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

Cette commande fait ce qui suit :

  • Elle effectue un LEFT OUTER JOIN entre MyTable et les KeepRows calculées.
  • Toute ligne dans MyTable qui n’a pas de correspondance avec un RowId dans KeepRows est supprimée.

Gestion des Identifiants Uniques

Si votre table inclut un GUID au lieu d’un entier pour l’identification des lignes, il vous suffit d’ajuster votre sélection MIN. Remplacez :

MIN(RowId)

par :

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))

Cela garantit que vous identifiez correctement le minimum GUID tout en maintenant l’intégrité du type de données.

Conclusion

Supprimer des lignes dupliquées d’un SQL Server peut être accompli efficacement en utilisant GROUP BY et leurs techniques de jointure et de suppression associées. En suivant ces étapes, vous pouvez maintenir une base de données propre et fonctionnelle sans risquer la perte de données importantes. N’oubliez jamais de sauvegarder votre base de données avant d’effectuer des suppressions massives par sécurité !

Avec les connaissances que vous avez acquises ici, vous pouvez aborder avec confiance la question des doublons dans vos tables SQL. Bon interrogatoire !