Requêtes SQL pour trouver les doublons

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.

Table d'utilisateurs avec des enregistrements dupliqués

Table d’utilisateurs avec des enregistrements dupliqués

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
Ce contenu a été publié dans Astuces.

A propos de l'auteur : Tony Archambeau

Fort de plusieurs années d'expérience dans le développement web, Tony partage ses connaissances sur des projets divers dont le site infowebmaster.fr. Il est possible de le suivre sur Twitter.
Partager

3 réflexions au sujet de « Requêtes SQL pour trouver les doublons »

  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 […]

  2. sb dit :

    Merci c’est parfait!

  3. John dit :

    Merci beaucoup ça m’a bien aidé! :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *