Delete de lignes redondantes

Delete de lignes redondantes - SQL/NoSQL - Programmation

Marsh Posté le 11-05-2004 à 08:36:49    

Bonjour,
 
Une question pour les pros de SQL. Ma question est la suivante : Je dispose d'une table pour laquelle je n'ai pas de clé unique. Dans ma table j'ai des lignes identiques (doublons, triplets, ...). Y-a-t-il une requête DELETE simple pour effacer les doublons, ... et ne garder que des lignes distinctes ?
 
Merci d'avance
 
 

Reply

Marsh Posté le 11-05-2004 à 08:36:49   

Reply

Marsh Posté le 11-05-2004 à 09:16:33    

fait un select distinct que tu mets dans une table temporaire, efface le contenu de ta premiere table puis recopie ta table temporaire dans l'autre.
Et enfin supprime ta table temporaire.
Il y a peut etre d'autre solution, mais celle ci est facile et elle fonctionne.
voili voilu

Reply

Marsh Posté le 11-05-2004 à 10:07:30    

merci pour ta réponse, j'ai juste la crainte que 300 000 occurences à traiter dans ma table ce soit un peut gourmand.
Je vais voir ...

Reply

Marsh Posté le 11-05-2004 à 10:18:09    

... d'autre part j'ai pas intérêt à me gourer, sinon je peux perdre toutes mes données...

Reply

Marsh Posté le 11-05-2004 à 10:50:01    

Quelle que soit la méthode que tu utilises, tu as vraiment intérêt à exporter la table avant de te lancer !
Ca te permettra de la restaurer si ça n'a pas marché.


---------------
Info-Camargue, le portail de la Camargue
Reply

Marsh Posté le 11-05-2004 à 13:46:42    

ouaip, tu peux faire un dump de ta table avant ;)
 
et puis :
 
create table table2 as select * from table1;
 
truncate table table 1;
 
insert into table1 (select distinct ... from table2);
 
et si tu as d'autres infos que les champs dans le distinct, tu les transmets par un update de table2 vers table1 :
 
update table1
set ...
where (clé_table1 = clé_table2 and ...);
 
Voilà, en gros ...
 
tu risques rien car tu as toujours le contenu de la table d'origine dans table2, si nécessaire.

Reply

Marsh Posté le 11-05-2004 à 13:51:36    

Et quelque chose dans ce genre :
 
DELETE FROM TA_TABLE T1 WHERE EXISTS
(SELECT 1 FROM TA_TABLE T2 WHERE T1.id <> T2.id AND T1.clef_unique = T2.clef_unique)

Reply

Marsh Posté le 11-05-2004 à 14:41:24    

ça marche aussi ... mais ça peut être très très long les EXISTS si la table contient beaucoup de lignes.
La solution de passer par une table temporaire peut -être plus rapide, et est surtout plus sécurisante ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed