Vous êtes sur la page 1sur 3

Requtes SQL pour trouver les doublons

La prsence de doublons dans une base de donnes est nfaste pour les
performances et lintgrit des donnes. Cela augmente artificielle la taille
dune base de donnes tandis que les donnes sont potentiellement
compromise.

Table dutilisateurs avec des enregistrements dupliqus

Type de doublons
Il y a trois type de doublons couramment sur les bases de donnes:

Doublon absolu : reprsente des tuples exactement identique.


Plusieurs lignes qui ont les mmes valeurs pour chaque colonne.

Doublon relatif : reprsente les tuples qui ont les mmes 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


diffrence entre les lignes peut tre une simple faute de frappe (double
espace au lieu dun seul) ou des diffrences entre majuscule et
minuscule.

Requte pour trouver les doublons absolus


Il y a une solution simple pour trouver les doublons absolus. Il faut
slectionner les champs dune table en les groupant par les colonnes
souhaites. La slection des champs doit inclure un comptage du nombre de
rsultat. Puis il suffit de filtrer les rsultats pour ne garder que ceux qui ont
plus dune ligne (donc au moins un doublons):
SELECTCOUNT(*)ASnbr_doublon,champ1,champ2,champ3

FROMtable
GROUPBYchamp1,champ2,champ3
HAVINGCOUNT(*)>1

Requte pour trouver les doublons relatifs


Si une table possde des doublons sur toute les colonnes sauf sur la cl, par
exemple pour une colonne ID, il est possible de les trouver laide de la
requte suivante:
SELECTDISTINCT*
FROMtablet1
WHEREEXISTS(
SELECT*
FROMtablet2
WHEREt1.ID<>t2.ID
ANDt1.champ1=t2.champ1
ANDt1.champ2=t2.champ2
ANDt1.champ3=t2.champ3)

A savoir : dans la sous-requte il utiliser la commande WHERE sur chacun


des champs o lont veut une galit.

Requte pour trouver les doublons sur une


colonne seulement
La requte est presque similaire celle pour chercher les doublons absolus.
Cette fois-ci nous allons prendre un exemple concret. Imaginons quon
souhaite lister les utilisateurs ayant la mme adresse email:
SELECTCOUNT(email)ASnbr_doublon,email
FROMutilisateur

GROUPBYemail
HAVINGCOUNT(email)>1

Vous aimerez peut-être aussi