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 19/09/2011, 16h23   #1
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
Par défaut supprimer les doublons d'une table

Bonjour,
Je souhaite supprimer les doublons d'une table et ne conserver que le dernier enregistrement d'un jeu de doublons. C'est à dire si j'ai 10 enregistrements ayant le champ nom avec pour valeur "okoweb", supprimer les 9 premiers (conserver l'enregistrement ayant l'id le plus grand, c'est à dire le tout dernier à s'être fait enregistré).

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 16h49   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
A lire donc, avant toute autre chose
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 10h42   #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 Maljuna Kris Voir le message
Saluton,
A lire donc, avant toute autre chose
Après avoir lu ce tuto,
  1. mes doublons sont de type relatif
  2. Mais ceci ne marche pas sous mysql
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    DELETE
    FROM   T_DOUBLON T
    WHERE  T.NUM < ANY (SELECT NUM
                        FROM   T_DOUBLON T2
                       WHERE  T.NUM <> T2.NUM
                        AND  T.NOM    = T2.NOM
                         AND  T.PRENOM = T2.PRENOM)

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 10h54   #4
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 abordé dans le forum !
__________________
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 20/09/2011, 12h07   #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
Citation:
Envoyé par CinePhil Voir le message
Sujet déjà maintes fois abordé dans le forum !
Effectivement, mais ce sujet n'a jamais été résolu. Voici la solution proposée
Code :
1
2
3
4
5
6
7
8
9
 
DELETE
FROM   T_DOUBLON T
WHERE  T.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T.NUM    <> T2.NUM
                      AND  T.NOM    = T2.NOM
                      AND  T.PRENOM = T2.PRENOM
                )
et j'ai cette erreur :
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 'T WHERE T.NUM < ( SELECT MIN(T2.NUM) FROM T_DOUBLON ' at line 2
  1. Quelqu'un pourrait m'expliquer cette requette ?
  2. L'erreur proviendrait d'où?

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 13h33   #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
Essaie d'enlever le premier FROM.
__________________
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 20/09/2011, 13h51   #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
Essaie d'enlever le premier FROM.
J'obtiens donc ceci
Code :
1
2
3
4
5
6
7
8
 
DELETE T_DOUBLON T
WHERE  T.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T.NUM    <> T2.NUM
                      AND  T.NOM    = T2.NOM
                      AND  T.PRENOM = T2.PRENOM
                )
Et hop erreur !
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 'WHERE T.NUM < ( SELECT MIN(T2.NUM) FROM T_DOUBLON T2 ' at line 2
Merci pour votre aide.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 14h00   #8
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
C'est peut-être l'alias qui pose problème. Voilà ce que dit la doc MySQL :
Citation:
Note : en MySQL 4.0, vous devez utiliser le véritable nom de table. En MySQL 4.1, vous devez utiliser l'alias éventuel, lorsque vous nommez la table :
En MySQL 4.0 :
DELETE test FROM test AS t1, test2 WHERE ...
En MySQL 4.1 :
DELETE t1 FROM test AS t1, test2 WHERE ...
La raison qui nous a poussé à ne pas faire ce changement en version 4.0, est la compatibilité ascendante avec les vieilles applications 4.0, qui utilisent la vieille syntaxe.
Essaie ceci :
Code :
1
2
3
4
5
6
7
8
DELETE T_DOUBLON 
FROM T_DOUBLON AS T
WHERE  T.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T.NUM    <> T2.NUM
                      AND  T.NOM    = T2.NOM
                      AND  T.PRENOM = T2.PRENOM
                )
Ou alors carrément sans alias :
Code :
1
2
3
4
5
6
7
8
DELETE T_DOUBLON 
FROM T_DOUBLON
WHERE T_DOUBLON.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T_DOUBLON.NUM    <> T2.NUM
                      AND  T_DOUBLON.NOM    = T2.NOM
                      AND  T_DOUBLON.PRENOM = T2.PRENOM
                )
__________________
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 20/09/2011, 15h40   #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
1.
Code :
1
2
3
4
5
6
7
8
9
 
DELETE T_DOUBLON 
FROM T_DOUBLON AS T
WHERE  T.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T.NUM    <> T2.NUM
                      AND  T.NOM    = T2.NOM
                      AND  T.PRENOM = T2.PRENOM
                )
Erreur :
Citation:
#1109 - Unknown table 't_doublon' in MULTI DELETE
2.
Code :
1
2
3
4
5
6
7
8
9
10
 
DELETE T_DOUBLON 
DELETE T_DOUBLON 
FROM T_DOUBLON
WHERE T_DOUBLON.NUM < (    SELECT MIN(T2.NUM)
                    FROM   T_DOUBLON T2
                    WHERE  T_DOUBLON.NUM    <> T2.NUM
                      AND  T_DOUBLON.NOM    = T2.NOM
                      AND  T_DOUBLON.PRENOM = T2.PRENOM
                )
erreur:
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 'DELETE T_DOUBLON FROM T_DOUBLON WHERE T_DOUBLON.NUM < ( SELECT MIN(T2.NUM)' at line 2
[EDIT] Je suis sous Mysql 5.1.36
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 15h51   #10
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 ne l'avais encore jamais vu celui-là :
Citation:
#1109 - Unknown table 't_doublon' in MULTI DELETE
Quant à la seconde requête, tu as deux fois DELETE T_DOUBLON ! Normal qu'il te sorte une erreur de syntaxe !
__________________
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 20/09/2011, 16h30   #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 CinePhil Voir le message
Je ne l'avais encore jamais vu celui-là :
Citation:
#1109 - Unknown table 't_doublon' in MULTI DELETE
Pourtant vrai.

Après suppression d'un delete
Citation:
#1093 - You can't specify target table 'T_DOUBLON' for update in FROM clause
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 08h45   #12
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
Solution : voir ce post
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h21.


 
 
 
 
Partenaires

Hébergement Web