Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2696 connectés 

 


Dernière réponse
Sujet : [SQL] comment supprimer des doublons ?
Mr Mazurier 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 ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Mr Mazurier 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 ...
fabd Euh, c a peut de chose pret la meme chose, sauf ke moi c ecrit en language ki doit fonctionner :)
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
fabd 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 ?
jupiler

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]

jupiler ta deuxieme methode ne va pas, je pense, laisser un exemplaire du doublon ??????
jupiler 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
godbout DISTINCT :??:
 
ou alors j'ai rien compris moi :crazy:
personne ne sait ?
je precise qu'il s'agit de SQL server
 
merci de me répondre
et conserver uniquement un exemplaire  
 
j'ai une base daubée à nettoyer

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)