IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

delete avec une jointure mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut delete avec une jointure mysql
    Bonjour. Je voudrais une confirmation ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM `stock_gpe_name`
             WHERE id_stock_gpe IN (
                        SELECT id_stock_gpe
                        FROM  `stock_gpe_name`as sgn
                        LEFT JOIN `stock_gpe`as sg ON sgn.id_stock_gpe= sg.id_gpe
                        WHERE sg.id_gpe IS NULL )
    Ce code ne fonctionne pas. Mysql répond:
    You can't specify target table 'stock_gpe_name' for update in FROM clause
    Faut-il obligatoirement passer par une table temporaire pour arriver à ses fins ?
    Merci.
    Débusqueur de bug et chercheur en améliorations

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Même réponse qu'à ton autre question, il doit suffire de masquer la table cible sous un alias dans la sous-requête.
    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)

  3. #3
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    J'ai fais comme ceci mais ce n'est pas encore ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM `stock_gpe_name` 
             WHERE id_stock_gpe IN (
                        SELECT sgn.id_stock_gpe
                        FROM  `stock_gpe_name`as sgn
                        LEFT JOIN `stock_gpe`as sg ON sgn.id_stock_gpe= sg.id_gpe
                        WHERE sg.id_gpe IS NULL )
    On ne peut pas mettre d'allias dans la première ligne. Ça ne fonctionne pas non plus.
    Il y a un truc que je n'ai pas dû bien comprendre....
    Débusqueur de bug et chercheur en améliorations

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Essaie comme ci-dessous, sur un jeu d'essai d'abord, au cas où.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELETE FROM stock_gpe_name s
    INNER JOIN
    (
    	SELECT sgn.id_stock_gpe
    	FROM  stock_gpe_name AS sgn
    	LEFT JOIN stock_gpe AS sg ON sgn.id_stock_gpe = sg.id_gpe
    	WHERE sg.id_gpe IS NULL 
    ) tmp ON tmp.id_stock_gpe = s.id_stock_gpe
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Je disais un post plus haut qu'on ne pouvait pas mettre d'allias dans la 1ere ligne. Voila le résultat de la Cde.
    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 's INNER JOIN ( SELECT sgn.id_stock_gpe FROM stock_gpe_name AS sgn LEFT JOIN ' at line 1
    Débusqueur de bug et chercheur en améliorations

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DELETE stock_gpe_name
    FROM stock_gpe_name s
    INNER JOIN
    (
    	SELECT sgn.id_stock_gpe
    	FROM  stock_gpe_name AS sgn
    	LEFT JOIN stock_gpe AS sg ON sgn.id_stock_gpe = sg.id_gpe
    	WHERE sg.id_gpe IS NULL 
    ) tmp ON tmp.id_stock_gpe = s.id_stock_gpe
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 015
    Points : 23 704
    Points
    23 704
    Par défaut
    En se basant sur l'exemple donné dans la FAQ MySQL, c'est plutôt quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE s
    FROM stock_gpe_name s
    LEFT JOIN stock_gpe AS sg ON s.id_stock_gpe = sg.id_gpe
    wHERE sg.id_gpe IS NULL
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  8. #8
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Merci Ced. C'est exactement ça. Merci à tous de m'avoir soutenu. Cordialement
    Débusqueur de bug et chercheur en améliorations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Faire des delete MySQL avec une jointure
    Par Voyageur Du Net dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/07/2010, 08h39
  2. Delete avec une jointure
    Par mazizou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/07/2007, 13h24
  3. [MySQL] probléme de repetition avec une jointure
    Par kenzo83220 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/11/2006, 17h24
  4. Réponses: 3
    Dernier message: 06/01/2006, 08h57
  5. Dialoguer avec une BDD MySQL en language C
    Par veridik dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2005, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo