Détecter les doublons en SQL

par

dans

Type de doublons

On distingue trois grandes familles de doublons de données :

  • Les doublons absolus : Il s’agit de plusieurs lignes ayant exactement les mêmes valeurs sur toutes les colonnes.
  • Les doublons relatifs : Il s’agit de plusieurs lignes ayant exactement les mêmes valeurs sur toutes les colonnes sauf sur la clé primaire.
  • Les presque doublons : Il s’agit de plusieurs lignes qui sont presque identiques. Les différences sont sur certaines colonnes ou bien sur la syntaxe (majuscule / minuscule, ponctuation, espace / tiret, etc.).

Détection des doublons absolus

Pour identifier les doublons absolus on sélectionne les champs d’une table en les groupant sur 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 doublon).

SELECT COUNT(*) AS nbr_doublon, champ1, champ2, champ3
FROM TABLE
GROUP BY champ1, champ2, champ3
HAVING COUNT(*) > 1;

Détection des doublons relatifs

Si une table possède des doublons sur toute les colonnes sauf sur la clé, 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
);

À savoir : Dans la sous-requête il faut utiliser la commande WHERE sur chacun des champs où l’ont veut une égalité.

Détection des doublons sur une colonne seulement

La requête est presque similaire à celle de détection des doublons absolus. Exemple en supposant que nous voulons 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;