ACCESS: 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. Malgré que l'assistant de requête ACCESS inclue une option pour créer une requête de recherche de doublons, les résultats ne listent que les items en double et le nombre de fois qu'ils apparaissent dans la table. Malheureusement, on ne peut pas ainsi supprimer les doublons trouvés. Pour cette raison, on doit aussi créer une requête SQL propre à cette fin dans ACCESS.
Le plus facile, c'est de commencer par créer un nouveau projet de requête et ensuite changer vers l'entrée directe de commandes SQL par l'élément de menu ‘Mode SQL’ dans le menu de contexte ou par le petit symbole 'SQL‘ tout en bas à droite de la fenêtre. Ici, on peut entrer les commandes SQL directement, comme avec les autres serveurs de bases de données. À l'aide du bouton 'Exécuter‘, la commande SQL entrée sera exécutée. Avec le petit symbole 'SQL‘ tout en bas à droite de la fenêtre, on retourne à la requête SQL correspondante.
Avec la requête suivante, par exemple, ORACLE 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 ORACLE:
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



