• Share on Google+

Une opération qui parait simple mais qui peut rapidement devenir assez compliqué est la suppression de duplicatas dans une base SQL.

J’ai récemment du traiter une base avec plus de 300.000 enregistrements, et cette méthode m’a semblé être la plus simple et la plus facile à mettre en place. En plus de ça, elle permet de supprimer les duplicatas selon plusieurs colonnes.

La technique consiste seulement à grouper les éléments par les champs censés être uniques, et à les déplacer dans une nouvelle table.

Si on execute cette requête, on peut voir le contenu de notre table SQL avec une colonne supplémentaire, la colonne count(*). Celle-ci indique seulement le nombre d’enregistrements pour lesquels les combinaisons col1 et col2 sont identiques.

SELECT *,count(*) FROM table GROUP BY col1,col2 ORDER BY count(*) desc

Si on veut uniquement grouper par un seul champs (col3 par exemple), on execute cette requête :

SELECT *,count(*) FROM table GROUP BY col3 ORDER BY count(*) desc

Maintenant qu’on a réussi à dédupliquer les champs, il faut mettre tout ça dans une nouvelle table. On va donc utiliser un CREATE TABLE, avec un AS :

CREATE TABLE new_table AS ()

Entre les parenthèses, il suffit de copier coller le sélécteur fait plus haut. La requête finale est donc :

CREATE TABLE new_table AS (SELECT * FROM table GROUP BY col1,col2)

Nos enregistrements sont désormais dédoublés dans notre table new_table. On fait un dernier petit test pour être sûr que ça a bien fonctionné :

SELECT *,count(*) FROM new_table GROUP BY col1,col2 ORDER BY count(*) desc

Normalement, la colonne count(*) devrait être 0 pour tous les enregistrements.

Et voilà !