MySQL: Chercher les doublons

En principe, il faut distinguer entre les doublons évidents et les doublons flous. Les doublons évidents, donc ceux où les caractères sont identiques sauf pour la casse, sont faciles à trouver avec des requêtes SQL. Avec la requête suivante, par exemple, MySQL retourne tous les enregistrements qui coïncident avec le contenu du champ de données 'nom':

SELECT tab1.id, tab1.name, tab2.id, tab2.name
FROM tablename tab1, tablename tab2
WHERE tab1.name=tab2.name
AND tab1.id<>tab2.id
AND tab1.id=(SELECT MAX(id) FROM tablename tab
WHERE tab.name=tab1.name)

Comme on peut voir, cette requête SQL a besoin d'une colonne avec un ID qui identifie chaque enregistrement clairement, pour assurer qu'un enregistrement ne sera pas comparé avec lui-même. En plus, cet ID est requis pour assurer que l'enregistrement avec le plus grand ID n'apparaîtra que dans la colonne 'tab1.id', et non aussi dans la colonne 'tab2.id'. De cette façon, on assure que l'enregistrement du groupe de doublons avec le plus grand ID ne sera pas supprimé. Les IDs des enregistrements qui seront supprimés sont écrits dans la colonne 'tab2.id'. Voici les résultats incorporés dans une commande DELETE pour MySQL:

DELETE FROM tablename 
WHERE id IN
(SELECT tab2.id
FROM tablename tab1, tablename tab2
WHERE tab1.name=tab2.name
AND tab1.id<>tab2.id
AND tab1.id=(SELECT MAX(id) FROM tablename tab
WHERE tab.name=tab1.name))

Cette commande SQL peut aussi être facilement élargie pour inclure, en plus du contenu du champ de données 'nom', d'autres champs de données dans la comparaison, par exemple, ceux qui contiennent l'adresse postale.

Vous pouvez en lire plus sur les autres possibilités offertes par SQL pour la recherche de doublons flous dans l'article 'Trouver les doublons flous avec SQL'. Ce problème ne peut être vraiment résolu qu’avec des outils spécialisés, qui offrent un dédoublonnage tolérante aux erreurs, comme par exemple DataQualityTools et DeduplicationWizard, disponibles sur www.DataQualityApps.fr. Vous pouvez lire comment utiliser DeduplicationWizard pour rechercher les adresses en double dans une table dans l'article 'Dédoublonnage avec le DeduplicationWizard'. Vous pouvez apprendre comment faire la déduplication entre deux tables avec DataQualityTools dans l'article 'Traiter les listes noires avec DataQualityTools'. Et dans l'article 'Dédoublonnage planifié avec BatchDeduplicator', vous pouvez en lire plus sur comment planifier la recherche d’adresses en double.

Auteur: Thomas Hainke