La présence de doublons dans une base de données est néfaste pour les performances et l’intégrité des données. Cela augmente artificielle la taille d’une base de données tandis que les données sont potentiellement compromise.
Type de doublons
Il y a trois type de doublons couramment sur les bases de données:
- Doublon absolu : représente des “tuples” exactement identique. Plusieurs lignes qui ont les mêmes valeurs pour chaque colonne.
- Doublon relatif : représente les “tuples” qui ont les mêmes valeurs sauf pour la clé. Le cas le plus typique ce sont les lignes identiques sauf pour la colonne “id”.
- Quasi doublon : concerne les lignes qui sont presque identiques. La différence entre les lignes peut être une simple faute de frappe (double espace au lieu d’un seul) ou des différences entre majuscule et minuscule.
Requête pour trouver les doublons absolus
Il y a une solution simple pour trouver les doublons absolus. Il faut sélectionner les champs d’une table en les groupant par les colonnes souhaitées. La sélection des champs doit inclure un comptage du nombre de résultat. Puis il suffit de filtrer les résultats pour ne garder que ceux qui ont plus d’une ligne (donc au moins un doublons):
SELECT COUNT(*) AS nbr_doublon, champ1, champ2, champ3 FROM table GROUP BY champ1, champ2, champ3 HAVING COUNT(*) > 1
Requête pour trouver les doublons relatifs
Si une table possède des doublons sur toute les colonnes sauf sur la clé, par exemple pour une colonne ID, il est possible de les trouver à l’aide de la requête suivante:
SELECT DISTINCT * FROM table t1 WHERE EXISTS ( SELECT * FROM table t2 WHERE t1.ID <> t2.ID AND t1.champ1 = t2.champ1 AND t1.champ2 = t2.champ2 AND t1.champ3 = t2.champ3 )
A savoir : dans la sous-requête il utiliser la commande WHERE sur chacun des champs où l’ont veut une égalité.
Requête pour trouver les doublons sur une colonne seulement
La requête est presque similaire à celle pour chercher les doublons absolus. Cette fois-ci nous allons prendre un exemple concret. Imaginons qu’on souhaite lister les utilisateurs ayant la même adresse email:
SELECT COUNT(email) AS nbr_doublon, email FROM utilisateur GROUP BY email HAVING COUNT(email) > 1
[…] et peuvent causer des erreurs sur un site web ou une application. Dans un précédent article des requêtes SQL pour trouver les doublons étaient présentées. Cet article-ci présente une requête pour supprimer les doublons tout en […]
Merci c’est parfait!
Merci beaucoup ça m’a bien aidé! :)