Requete suppression de doublon

Soyez le premier à donner votre avis sur cette source.

Snippet vu 43 366 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

cs_bir
Messages postés
9
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
15 mars 2009
-
bjr est ce DISTINCT ne ferai pas l'affaire.
cs_LordBob
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
8 -
le truc, c'est que ici on supprime le doublon. le distinct lui permet effectivement de n'afficher qu'une seul ligne, mais c'est une question de performance et de coherence de ta base.

regarde pour la performance, tu as une table de 100 000 enregistrement, et chaque enregistrement posséde 4 doublons. ta base contient alors 4 fois plus de données et lorsque tu va faire des requetes sur cette table, tu va avoir une baisse de performance, une execution de ta requete plus lente puisque tu as 4 fois plus de données a parcourir!
epopoi27
Messages postés
2
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2007
-
bonjour,

ma version d'essai d'access 2007 me répond obstinément :
"La requête doit avoir au moins un champ de destination"

Kézako ?

Merci d'avance,

Eric
maxroucool
Messages postés
44
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
28 janvier 2013
-
Slt tba,

je me souviens avoir déjà testé cette requête qui marchait bien. Je l'ai donc mise dans mes favoris. Seulement je n'arrive pas a la refaire marcher sur la même table, et le même serveur...

J'ai une table "episodes" avec pour clé primaire "id" et le champ dont je veux supprimer les doublons est "url". Voici donc ma requête:

DELETE FROM episodes T1 WHERE id NOT IN (
SELECT min( id )
FROM episodes T2
WHERE T1.url = T2.url
GROUP BY url
)

et voici l'erreur que MySQL me retourne:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id not in (select min(id)
from episodes T2 where T1.url=T2.url
group by ' at line 2

Merci bp!
+++
cirdec14
Messages postés
3
Date d'inscription
vendredi 21 mars 2008
Statut
Membre
Dernière intervention
23 octobre 2012
-
bonjour MAXROUCOOL,
ceci fonctionne avec id indexé oui-sans doublons:

DELETE T1.id, *
FROM episodes AS T1
WHERE (((T1.id) Not In (SELECT min( id )
FROM episodes T2
WHERE T1.url = T2.url
GROUP BY url
)));

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.