-
Champs auto incrémenté
Bonjour tout le monde.
SVP comment faire pour supprimer les doublons d'une table, sachant que je lui ai ajouté un champ "Identity" (auto incrémenté) ?
j'ai déja essayé mais ca marche pas.
j'obtient en resultat la suppression de tout les champ en double. (Je veux supprimer tout les doublons et ne garder dans ma table qu'un seul exemplaire)
Des requettes de suggestion ?
Merci d'avance pour vos reponses
-
Tu fais une jointure sur la table avec lui-meme sur les champs qui contiennent le doublon
Champ_Doublon1: 1er champs qui contient un doublon
Champ_Doublon2: 2e champs qui contient un doublon
etc....
Champ_Autoincrement: Ton champ qui est auto-increment
DELETE T1
FROM TA_TABLE T1
INNER JOIN TA_TABLE T2 ON T2.Champ_Doublon1 = T1.Champ_Doublon1
AND T2.Champ_Doublon2 = T1.Champ_Doublon2
(etc...)
WHERE T1.Champ_Autoincrement > T2.Champ_Autoincrement
Ca va te supprimer tous les doublons et garder que ceux dont le Champ_Autoincrement a la valeur la plus petite (si tu veux la valeur la plus grande, tu inverse le ">" en "<" )
-
En fait j'ai fais ce traitement mais ca n'a pas marché.
Et merci avant tout pour ta réponse.
Le truc est de rajouter une boucle WHILE a ce traitement, car sans la vboucle, ca ne supprime qu'un seul doublon par article, donc dans le cas ou on aura + de deux lignes en double, il y aura tjrs des doublons.
avec la boucle WHILE, et avec un test sur @@ROWCOUNT, ca marche.
Merci encore une fois pour ta réponse
Bonne programmation ;)
-
Cool que ca fonctionne
Sinon un autre truc sans faire de boucle et qui doit fonctionner
DELETE FROM TA_TABLE
WHERE Champ_Autoincremente NOT IN
(
SELECT Max(Champ_Autoincrement)
FROM TA_TABLE
GROUP BY Champ_Doublon1, Champs_Doublon2 (,etc...)
)
La sous-requete affiche les Champ_Autoincrement a conserver, et donc on supprime tout ceux qui n'en font pas parti
La tu conserve les Champ_Autoincrement les plus grand, pour garder les plus petit tu fais un Min()