Requete suppression de doublon

Soyez le premier à donner votre avis sur cette source.

Snippet vu 44 841 fois - Téléchargée 17 fois

Contenu du snippet

Cette requete SQL permet de supprimer les doublons d'une table sur un champ.
Une seule exécution suffit !
Il est impératif pour qu'elle fonctionne que :
- La table posséde une clé primaire (ce qui devrait toujours etre le cas :) )
- Le champs sur lequel les doublons sont recherché doit être indexé, sinon la requete fonctionnera mais env 1H pour 10000 enregistrement, sinon, utra rapide, 1s pour 10000.

Ne pas changer T1 et T2 dans le code de la requete !!!!

Source / Exemple :


delete from <table> T1
where <clé primaire> not in (select min(<clé primaire>) 
from <table> T2 where T1.<champ a comparer>=T2.<champ a comparer>
group by <champ a comparer>);

Conclusion :


voila, comme j'ai l'impression que tout le monde rame pour supprimer des doublons, j'ai mis ce bout de code en espérant que cela puisse aider.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
dimanche 22 février 2009
Statut
Membre
Dernière intervention
14 juillet 2010

merci mon pote cirdec14 ca m'aider becoup que soi dieu avec toi
Messages postés
8
Date d'inscription
mercredi 18 juin 2008
Statut
Membre
Dernière intervention
23 septembre 2010

Bonjour,

Petite remarque pour les utilisateurs de SQL-Server...

En Transact-SQL il n'est pas permis d'associer un alias à la table dans laquelle on supprime un enregistrement. On est donc obligé de passer par une solution de ce type :

delete from <table>
where <clé primaire> in
(
select T1.<clé primaire>
from <table> T1, <table> T2
where T1.<champ a comparer 1> = T2.<champ a comparer 1>
and T1.<champ a comparer 2> = T2.<champ a comparer 2>
<etc.>
and T1.<clé primaire> > T2.<clé primaire>
)
Messages postés
39
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
19 juin 2009

ERRATUM
Voici ma requête :
DELETE T1.ID, T1.matricule, T1.prenom, T1.nom, T1.psw, T1.Modif, T1.Manager, T1.JNais, T1.MNais, T1.User_Group, T1.User_Population
FROM [user] AS T1
WHERE ((T1.ID) Not In (SELECT min(ID)
FROM [user] T2
WHERE T1.matricule = T2.matricule
GROUP BY matricule
)
Messages postés
39
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
19 juin 2009

Bonjour,

j'ai executé ces requêtes mais sans aucun résultat, j'ai une erreur : syntaxe incorrecte vers 'T1' :
Voici ma requête :
DELETE T1.ID, T1.matricule, T1.prenom, T1.nom, T1.psw, T1.Modif, T1.Manager, T1.JNais, T1.MNais, T1.User_Group, T1.User_Population
FROM [user] AS T1
WHERE ((T1.id) Not In (SELECT min( id )
FROM episodes T2
WHERE T1.url = T2.url
GROUP BY url
)
la Table [user] contient des doublons, je travaille sous SQL 2005, mais j'ai juste le moteur de base de données, quand j'execute la requête pour affciher les doublons c'est OK, mais quand je les supprime à la main, j'ai ce message d'erreur : "la ligne mise à jour a été modifiée ou supprimée depuis la dernière extraction des données"
la requête d'affichage est : SELECT matricule, prenom, nom, psw, Modif, Manager, JNais, MNais, User_Group, User_Population
FROM [user]
GROUP BY matricule, prenom, nom, psw, Modif, Manager, JNais, MNais, User_Group, User_Population
HAVING (COUNT(*) > 1)

Je n'arrive pas à supprimer en testant toutes les requêtes qui existe sur cette page ces doublons qui n'optimise pas la recherche
je vous remercie par avance
Afficher les 10 commentaires

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.