DELETE doublons SQL server 2008 [Résolu]

cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 20 avril 2014 à 14:01 - Dernière réponse : yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention
- 5 mai 2014 à 12:15
Bonjour ,
après des recherche sur le net, afin de trouver une requête qui me permettra de supprimer les doublons dans ma table "manif" sous sql server 2008, j'ai trouvé une solutions plutôt souple :

1/Créer une colonne
ALTER manif
      ADD colid uniqueidentifier


2/remplir la colonne avec un identifient pour chaque enregistrement
UPDATE manif
SET    COLUID = newid()


3/lancer la requête qui supprime les doublons
delete from manif 
where colid in 
( select colid from manif t1 where exists 
( select colid from manif t2 where t1.colid <> t2.colid 
and t1.agence = t2.agence ) )


La procédure marche parfaitement , en revanche elle supprime tout les enregistrement en double, y compris le premier enregistrement
maintenant , je ne sais pas comment formuler ma requête pour garder le premier enregistrement

Merci d'avance pour votre précieuse aide
Afficher la suite 

Votre réponse

2 réponses

cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 22 avril 2014 à 10:14
0
Merci
Bonjour,
pour les personnes qui aimerons savoir la solution, en fait il fallait juste mettre "> any" à la place de "in" et quelques rectifi comme =>

DELETE
FROM   manif 
WHERE  manif .COLUID > ANY
   (SELECT COLUID
    FROM   manif  T2
    WHERE  manif .COLUID <> T2.COLUID
          AND  manif .reserve = T2.Reserve )
Commenter la réponse de cs_mohellebi
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 5 mai 2014 à 12:15
0
Merci
salut,

tu peux rajouter un "and" pour exclure le manif.colid de référence
afin de ne pas le supprimer

delete from manif 
where colid in 
    ( select t1.colid from manif t1 where exists 
        ( select t2.colid from manif t2 where t1.colid <> t2.colid 
           and t1.agence = t2.agence )
        and t1.colid <> manif.colid )


bye...
Commenter la réponse de yann_lo_san

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.