[REGLE] dédoublonner une table

WRInaute accro
Bonjour,

j'ai une table d'association d'articles à des entreprises (id_art et id_ent) sauf que j'ai des doublons. comment je fais EN SQL la requete magique qui va me supprimer tous les doublons de ma table ?

merci !
 
WRInaute discret
Quand tu parles doublons, tu parles du libellé de l'article mais avec id_art et id_ent différents, ou des doublons genre deux enregistrements comportant le meme id_art et meme id_ent ?
 
WRInaute passionné
1. Tu fais d'abord un SELECT pour identifier tes doublons. Un truc du style ( à adapter ) :

Code:
SELECT id_art, id_ent, count(*)
FROM latable
GROUP BY id_art, id_ent
HAVING count(*) > 1

2. Si la sélection te semble correcte, tu remplace l'instruction SELECT, par une instruction DELETE. Je m'abstiendrai d'écrire le DELETE :D
Evidemment avant, tu as fait une petite sauvegarde de ta table...

EDIT : Le passage du SELECT au DELETE est pas aussi direct que ça. Si tu fait un DELETE de la sélection tu vas effacer tout les enregistrements qui sont en double, et c'est pas ce que tu veux faire.
 
WRInaute passionné
Un distinct dans la requête Select aussi. Tout dépend de comment sont tes doublons.

Et comme conseillé par spidetra faire des tests avant ;)
 
WRInaute passionné
Une solution assez simple consiste a passer par une table temporaire :
Code:
SELECT DISTINCT id_art, id_ent
INTO   table_temp
FROM   latable
GROUP  BY id_art, id_ent
HAVING COUNT(*) > 1

suppression des doublons dans la table. A MANIPULER APRES SAUVEGARDE
Code:
DELETE
FROM latable t1
WHERE  EXISTS (SELECT *
               FROM   latable t2
               WHERE  t1.id_art = t2.id_art
                 AND  t1.id_ent = t2.id_ent
               GROUP  BY id_art,  id_ent
               HAVING COUNT(*) > 1)

recopie de la table temporaire dans ta table
Code:
INSERT INTO latable
SELECT id_art, id_ent
FROM   table_temp

suppression de la table temporaire
Code:
DROP TABLE table_temp
 
WRInaute passionné
Il y a quand même un petit truc que je ne comprends pas :

- table Article : PK : id_art
- table Entreprise : PK : id_ent

La clé primaire de ta table d'association devrait être une clé composite ( id_art, id_ent ).
Tu ne devrais pas avoir de doublons sur ces 2 colonnes.

C'est quoi la clé primaire de ta table d'association ?

Si tu ne peux pas transformer (id_art, id_ent) en clé primaire, tu devrais au moins mettre un INDEX UNIQUE sur ces 2 colonnes pour éviter les doublons dans le futur.
 
WRInaute accro
d'apres toi pourquoi je cherches à virer les doublons ? :) pour reparer l'erreur de précédent webmaster en transformant ces clés en index+clés primaires. et chose faite, je passe de 4mn à 2 sec ma requete, je suis content :)

ps : comme tu l'a rectifié, ta requete supprimai les doublons, mais les 2 enregistrements :) je l'ai donc fait en php. problème réglé
 
Discussions similaires
Haut