REQUETE SUPPRESSION DE DOUBLON

cs_bir Messages postés 9 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 15 mars 2009 - 25 juin 2007 à 13:21
 2016 - 19 juin 2016 à 15:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43198-requete-suppression-de-doublon

merci
ginios Messages postés 1 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 14 juillet 2010
14 juil. 2010 à 14:19
merci mon pote cirdec14 ca m'aider becoup que soi dieu avec toi
fab421 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 23 septembre 2010
8 juil. 2009 à 13:39
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>
)
simodel Messages postés 38 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 19 juin 2009
9 déc. 2008 à 11:29
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
)
simodel Messages postés 38 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 19 juin 2009
9 déc. 2008 à 11:24
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
cirdec14 Messages postés 3 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 23 octobre 2012
13 nov. 2008 à 01:14
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
)));
maxroucool Messages postés 44 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 28 janvier 2013
3 oct. 2008 à 15:09
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!
+++
epopoi27 Messages postés 2 Date d'inscription jeudi 6 janvier 2005 Statut Membre Dernière intervention 10 novembre 2007
10 nov. 2007 à 16:18
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
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
25 juin 2007 à 22:20
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!
cs_bir Messages postés 9 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 15 mars 2009
25 juin 2007 à 13:21
bjr est ce DISTINCT ne ferai pas l'affaire.
Rejoignez-nous