[SQL] comment supprimer des doublons ?

comment supprimer des doublons ? [SQL] - Programmation

Marsh Posté le 05-10-2001 à 14:53:14    

et conserver uniquement un exemplaire  
 
j'ai une base daubée à nettoyer

Reply

Marsh Posté le 05-10-2001 à 14:53:14   

Reply

Marsh Posté le 05-10-2001 à 15:12:00    

personne ne sait ?
je precise qu'il s'agit de SQL server
 
merci de me répondre

Reply

Marsh Posté le 05-10-2001 à 16:01:58    

DISTINCT :??:
 
ou alors j'ai rien compris moi :crazy:

Reply

Marsh Posté le 05-10-2001 à 16:07:04    

méthode bourrin:
select distinct (champs avec doublons) from table_qui_va_pas
 
le tout dans une table temporaire, puis suppression de l'ancienne table et renommage de la table temporaire
 
 
méthode qu'elle est déjà un peu mieux puisque pas de table temporaire
delete from table_qui_va_pas where champ_double in  
(select count(champ_double) from table_qui_va_pas having count(champ_double) >= 2)
 
pas sur que ca marche sur SQL-Server


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 05-10-2001 à 16:10:15    

jupiler ta deuxieme methode ne va pas, je pense, laisser un exemplaire du doublon ??????

Reply

Marsh Posté le 05-10-2001 à 16:32:42    

BenDk97 a écrit a écrit :

jupiler ta deuxieme methode ne va pas, je pense, laisser un exemplaire du doublon ??????  




 
 
ben c'est ce que tu veux non? supprimer les doublons :D
 
 
 
bon alors tu fais une table temporaire qui contient les id des doublons (select ... having count >=2)  
 
puis tu delete les lignes de doublons :
delete from table_qui_va_pas where id in (select id from la_table_temporaire)  
 
(fais une jointure plutot qu'un select in, c'est plus propre)
 
 
il ne te reste plus qu'à réinjecter le contenu de la table temporaire dans la table de départ puisque la table temporaire ne contient qu'un seul exemplaire de chaque doublon

 

[edtdd]--Message édité par jupiler--[/edtdd]


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 05-10-2001 à 18:31:48    

delete * from table where id not in (select distinct id from table)
 
La requete imbriqué selectionne 1 exemplaire de chaque (donc ignore les doublons)
Ensuite la 1er requete supprime tout les entrées dont les resultats ne sont pas ds la requete imbriqué, donc les doublons.
 
Ca marche ?

Reply

Marsh Posté le 06-10-2001 à 09:16:40    

Autre méthode plus simple :
 
tu fais un group by comme on t'a dit
 
Hirondelle 20
Tortue 6
Elephant 3
 
Et là tu lances une boucle qui selectionne le doublon que tu veux garder par ex le plus récent en id
 
SELECT TOP 1 id FROM base WHERE nom = 'hirondelle' ORDER BY id desc
 
Là tu récupères une seule ID : l'ID à pas effacer
 
Et tu effaces le reste :
 
DELETE FROM base WHERE nom = 'hirondelle' AND id <> id_a_pas_effacer

Reply

Marsh Posté le 06-10-2001 à 13:52:08    

Euh, c a peut de chose pret la meme chose, sauf ke moi c ecrit en language ki doit fonctionner :)

Reply

Marsh Posté le 25-01-2005 à 19:47:31    

salut
j'ai regardé ce que vous donnier comme code mais ca ne marche pas ou alors j'ai mal fais
enfin c'est pas le pb, et j'ai donc fouinné pour trouver une autre solution.
le coup de la table temporaire me plaisait bien, j'ai donc fait une requete:
 
INSERT INTO imprimantesTMP (modele, marque, nogroupe, nogroupe2)
SELECT DISTINCT(modele) FROM imprimantes;
 
et malheuresemnt ca ne marche pas... je capte pas  
si quelqu'un voit une erreur ...

Reply

Sujets relatifs:

Leave a Replay

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