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.

  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.

  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....

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    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

  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

  6. #6
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    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

  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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    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

  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

+ 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, 09h39
  2. Delete avec une jointure
    Par mazizou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/07/2007, 14h24
  3. [MySQL] probléme de repetition avec une jointure
    Par kenzo83220 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/11/2006, 18h24
  4. Réponses: 3
    Dernier message: 06/01/2006, 09h57
  5. Dialoguer avec une BDD MySQL en language C
    Par veridik dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2005, 12h58

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