DELETE doublons SQL server 2008 [Résolu]

Signaler
Messages postés
104
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
1 août 2019
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

2 réponses

Messages postés
104
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
1 août 2019
2
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 )
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
23
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...