ACCESS: Chercher les doublons (enregistrements en double)

Les enregistrements en double sont déjà difficiles à contrôler manuellement dans les petits fichiers, donc avec les grandes quantités de données telles que celles gérées avec ACCESS, ils ne peuvent être maîtrisés qu'avec un outil approprié.

En principe, il faut distinguer entre les doublons évidents et les doublons flous. Vous trouverez plus d’informations sur les doublons flous dans l’article "Doublons avec de petites différences". 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, ACCESS 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 ACCESS:

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 une recherche de doublons tolérante aux erreurs, comme par exemple DataQualityTools: