Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REQUETE SUPPRESSION DE DOUBLON


Information sur la source

Catégorie :Procédure Classé sous : doublon, suppression, sql Niveau : Initié Date de création : 21/06/2007 Vu : 11 558

Note :
6 / 10 - par 4 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

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

  • 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>);
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.

 

Commentaires et avis

signaler à un administrateur
Commentaire de bir le 25/06/2007 13:21:18

bjr est ce DISTINCT ne ferai pas l'affaire.

signaler à un administrateur
Commentaire de LordBob le 25/06/2007 22:20:27

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!

signaler à un administrateur
Commentaire de epopoi27 le 10/11/2007 16:18:12

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

signaler à un administrateur
Commentaire de maxroucool le 03/10/2008 15:09:41

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!
+++

signaler à un administrateur
Commentaire de cirdec14 le 13/11/2008 01:14:27 8/10

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
)));

signaler à un administrateur
Commentaire de simodel le 09/12/2008 11:24:26

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

signaler à un administrateur
Commentaire de simodel le 09/12/2008 11:29:58

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
)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Suppression de doublon.... [ par Ry_Yo ] Bonjour &#224; tous,Je travail sous sqlserver et apr&#232;s recherche sur votre site, je n'ai pas trouv&#233; de m&#233;thode pour supprimer des doubl [SQL SERVEUR 2000]Suppression et contrainte integrite ! [ par jimmy69 ] &nbsp; bonjour a tous, J'ai un p'tit souci au point de vue des suppressions dans mes tables !je vous explique ... J'ai un projet qui contient quelques SQL Server: Suppression fichiers par rapport à une date [ par stan08 ] Bonjour,J'aimerais connaitre le moyen (s'il existe) de supprimer dans un répertoire tous les fichiers dont la date de modification (ou création) est s langage Transact-SQL [ par edpimi ] Bonjour, Pouvez vous me dire ce que signifie dans la creation d'une table, "COLLATE SQL_Latin1_General_CP1_CI_AS" voici le code : CREATE TABLE TV installation sql server [ par erita87 ] salut au cours de  l'installation du sql server il me donne un choix entre:ordinateur local ou ordinateur distant.quand je click sur local y a un msg sql+php [ par lsamsoumal ] Bonjour tout le monde. j'ai un petit problème que je me casse la tête pour le résoudre sans arrêt et ca ne marche toujour pas. Il s'agit d'une table m [SQL Server] Modifier/forcer l'heure d'un DATETIME [ par Sieurcoug ] Bonjour,Dans une fonction, j'ai besoin de forcer l'heure d'un DATETIME.Par exemple si l'heure de création est inférieure à 8h00, il faut retenir 8h00 Trigger et @@identity dans sql server [ par grapevine ] Bonjour à tous , Je me pose une question assez pointue et j'attends que les spécialistes de sql server se manifestent :Imaginer que je crée une table Requete SQL - 3 mois glissants [ par bbertt ] Avant toutes choses, Bonjour a tousJe tiens à vous remercier car le forum m'a permis de répondre à une grande quantité de questions durant mon stage.C requete sql [ par moustaine84 ] slt je cherche une requete qui fait l'insertion des des champs dans deux tableaux prmier tableua  a(id-a,nom, prenom) et l 2eme tableau b(id-b,id-a,ag


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.