Supprimer les doublons

Le problème exposé dans ce sujet a été résolu.

Bonjour :)
J'ai une base de donnée assez conséquente, d'environ 250 000 entrées, qui contient des doublons. Il y a une colonne qui contient du texte qui s'appel "domaine". Le but est de supprimer les doublons dans la colonne domaine. Vu le nombre de lignes dans la base de donnée, je ne peux pas y réaliser avec une boucle, je doit donc le faire en une seule requête. J'ai trouvé des tutos/exemples sur Internet sans réussir. Que pourrais-je utiliser ?

Merci d'avance :) !

+0 -0

Il te suffit de procéder ainsi :

C'est irréversible.

+0 -0

Du coup, tu peux créé un index unique sur la table avec la commande ALTER IGNORE TABLE sites ADD UNIQUE INDEX(domaine); cela supprimera toutes les lignes qui ont le même domaine.

Quand on essaye d’inséré une nouveau doublon, ça affichera une erreur, si ce comportement te pose des soucis, tu peux supprimer la contrainte en faisant un ALTER TABLE sites DROP INDEX domaine;.

Tu peux trouver plus d'explication sur ce site.

Essaye :

1
DELETE FROM sites WHERE ID NOT IN (SELECT ID, DISTINCT domaine FROM sites)

Le problème de cette sous-requête, c'est qu'elle va retourner une liste de couples (id, domaine), donc on compare dans le WHERE un identifiant (un entier) à un couple.

+0 -0

C'est pas le type de champ adapté pour sauvegarder du texte, "blob", c'est pour stocker du binaire. Tu peux le changer en type "text" ou c'est une obligation métier de le garder sous format "blob" ?

Si tu peux le changer, tente un ALTER TABLE sites MODIFY domaine varchar(500). Fait attention, je connais pas les risques, si le texte contient des accents, le mieux serait de faire une sauvegarde avant d'envoyer la commande. Si la dernière commande passe, tu peux tenter l'index pour supprimer les doublons.

+0 -0

Du coup, j'ai éditer entre temps, la bonne commande est ALTER TABLE sites MODIFY domaine varchar(500) te permetant de changer le type de colonne de ton champ dans MYSQL. Ça supprime rien, ça change juste le type de colonne.

Après tu peux exécuter, la commande ALTER IGNORE TABLE sites ADD UNIQUE INDEX(domaine).

De ce que j'ai vu, il faut créer une autre table :

  • Tu crées une table T avec les éléments que tu souhaites conserver ;
  • Tu supprimes les éléments de la table sites dont l'id n'apparaît pas dans la table T ;
  • Tu supprimes T.
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte