SQL : supprimer des doublons
Il existe un moyen très simple d’éviter les doublons, c’est de mettre une propriété UNIQUE sur le ou les champs ne devant pas se retrouver en double (exemple, une table MyTable avec un champ field1 qui ne peut se trouver 2 fois, comme une adresse email dans une table de comptes utilisateurs).
Mais si la table n’a pas été conçue dans cette optique à la base et que des doublons sont à supprimer (car ils doivent l’être avant d’appliquer la propriété UNIQUE), voici une méthode qui a pu marcher pour moi :
DELETE FROM MyTable WHERE id IN (SELECT * FROM (SELECT a1.id FROM MyTable a1 INNER JOIN MyTable a2 ON a1.id<>a2.id and a1.field1=a2.field1 ORDER BY a1.id ASC) as x)
En effet, il faut noter le SELECT * FROM () AS x qui permet de sauter le blocage de SQL qui interdit de supprimer une table qui sert de filtrage. Sans cela, l’exécution génèrera une erreur 1094.