mercredi 3 février 2010
Un client nous a envoyé une liste de ses contacts dans le but de les importer dans un de nos systèmes. En recevant le fichier, mon chargé de projet a jeté un coup d'oeil et a remarqué qu'il comportait de nombreux doublons. Il m'a suggéré d'utiliser un tableur comme Excel pour faire le ménage de la liste et éliminer les duplicatas pour que chaque adresse courriel demeure unique.
À vrai dire, je ne maîtrise pas tout à fait les formules Excel alors mon réflexe de programmeur a été d'importer la liste dans une table temporaire de la base de données et d'évaluer combien d'enregistrements s'y retrouvent plus d'une fois :
SELECT email, count(*)En créant la table temporaire, j'ai pris soin d'ajouter une clé primaire IDENTITY(1,1) pour pouvoir en tirer profit au moment de la suppression.
FROM contacts
GROUP BY email
HAVING count(*) > 1
DELETE c1Comme la séquence de la clé primaire id s'incrémente pour chaque enregistrement au moment de l'importation, je peux m'en servir pour supprimer les enregistrements identiques trouvés avec le produit croisé effectué sur la table elle-même.
FROM contacts c1, contacts c2
WHERE c1.email = c2.email
AND c1.id > c2.id
Ainsi, deux enregistrements possédant la même clé email auront deux identificateurs différents :
id name emailPour chaque combinaison, seul celui dont l'ID est le plus petit sera conservé et les autres seront retirés. Sur une table déjà existante, j'aurais plutôt eu tendance à comparer le champ de date de création ou de modification afin de ne conserver que le plus récent.
100 code 18 code18.blogspot@gmail.com
200 code 18 code18.blogspot@gmail.com
tout simplement parfait
merci
Une autre solution est d'utiliser ROW_NUMBER ()
Supprimer les lignes dupliquées d'une table SQL Server