Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 20h13   #1
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 1
Points : 0
Points : 0
Par défaut suppression des doublons

Bonsoir à tous Je gère une base de données contenant des inscriptions, je ne retrouve avec les mêmes personnes inscrites plusieurs fois. Je souhaite savoir comment faire une requête pour ne conserver que la dernière inscription pour une même personne en sélectionnant ID nom prénom date de naissance.
Merci pour votre aide.@+
yann2964 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 23h09   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Sujet déjà maintes fois évoqué !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 14h39   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Sujet déjà maintes fois évoqué !
Oui mais jamais résolu de cette manière :
Code :
1
2
3
4
5
6
 
DELETE FROM agents t1 
WHERE EXISTS (SELECT * FROM agents t2 
                    WHERE t1.id_agent < t2.id_agent 
                        AND t1.noms = t2.noms
                        AND t1.prenoms = t2.prenoms)
Citation:
#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 't1 WHERE EXISTS (SELECT * FROM agents t2 WHERE t1.id_age' at line 1
Pourtant ce code marche :
Code :
1
2
3
4
5
6
 
SELECT * FROM agents t1 
WHERE EXISTS (SELECT * FROM agents t2 
                    WHERE t1.id_agent < t2.id_agent 
                        AND t1.noms = t2.noms
                        AND t1.prenoms = t2.prenoms)
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 14h57   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Ce qui est bizarre, ce code marche sous firebird. Confère ce post.

Le problème ne viendrait-il pas de Mysql ?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 16h28   #5
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Pour le besoin suis obligé de contourner ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
//Remplissage de la TABLE temporaire
INSERT INTO agents_tmp
SELECT * FROM agents AS t1
WHERE EXISTS (SELECT * FROM agents AS t2 
                    WHERE t1.id_agent < t2.id_agent 
                        AND t1.noms = t2.noms
                        AND t1.prenoms = t2.prenoms);
 
//Suppression des éléments de la TABLE principale qui existe sur la TABLE temporaire
DELETE FROM agents
WHERE id_agent IN (SELECT agent_id FROM agents_tmp);
 
//Vidange de la TABLE temporaire
TRUNCATE TABLE agents_tmp;
Ca marche mais lourd. Et je sais pas le comportant pour une table principale avec des millions d'entrées.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 17h32   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Je sais que le code standard de suppression de doublon ne fonctionne pas mais ilo me semble avoir déjà vu une solution.

De mémoire, je crois qu'il faut écrire le début de la requête ainsi pour qu'il prenne en compte l'alias :
Code :
1
2
DELETE agents 
FROM agents t1
Pas envie de rechercher maintenant après 6h de dev' quasi ininterrompues !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 17h46   #7
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
De mémoire, je crois qu'il faut écrire le début de la requête ainsi pour qu'il prenne en compte l'alias :
Code :
1
2
DELETE agents 
FROM agents t1
Code :
1
2
3
4
5
6
 
DELETE agents FROM agents t1 
WHERE EXISTS (SELECT * FROM agents t2 
                    WHERE t1.id_agent < t2.id_agent 
                        AND t1.noms = t2.noms
                        AND t1.prenoms = t2.prenoms)
Erreur :
Citation:
#1109 - Unknown table 'agents' in MULTI DELETE
Citation:
Envoyé par CinePhil Voir le message
Pas envie de rechercher maintenant après 6h de dev' quasi ininterrompues !
Sorry !
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 09h49   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Bonjour,
Après plusieurs recherches, j'ai lu :
Citation:
Limitations MySQL
Les limitations sur DELETE sont les mêmes que pour UPDATE : on ne peut supprimer de lignes d'une table qui est utilisée dans une sous-requête.
Ce disfonctionnement ne serait pas dû à cela ?

Meilleures salutations.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 10h24   #9
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Vu cette limitation, nous sommes obligés de passer autrement :
  • une table temporaire tel fait ci-haut
  • soit une jointure

dans le cas d'une jointure :
Code :
1
2
3
4
5
 
DELETE t1
FROM agents t1
INNER JOIN agents t2 ON t1.noms = t2.noms AND t1.prenoms = t2.prenoms
WHERE t1.id_agent < t2.id_agent;
Je pense ce sera utile pour tous ceux qui ont eu ce besoin.

Meilleures salutations
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/11/2011, 10h29   #10
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
J'attends vos suggestions et critiques avant de mettre en résolu.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 08h43   #11
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par okoweb Voir le message
J'attends vos suggestions et critiques avant de mettre en résolu.
Tellement ce sujet m'a préoccupé que je pensais le mettre en résolu.
Dommage suis pas l'auteur du post.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h16.


 
 
 
 
Partenaires

Hébergement Web