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 :

You can't specify target table for update in FROM clause mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut You can't specify target table for update in FROM clause mysql
    Bonjour,
    j'essaie de mettre à jour depuis une autre, mais j'ai constaté cette l'erreur que j'ai mis en sujet.
    j'ai une table T1 avec la colonne switch et une table T2 avec switch_type, idswitch
    et je voudrai metter à jour la table 1 avec l'idswitch de la table 2.
    sachant que T1.switch=T2.switch_type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update  `T1` set `Switch`=(select Numéro from T2 where Switch_Type=repart_test.switch)
    cette requete me mets Null partout dans la table T1

    ensuite j'ai essayé avec une jointure externe et là j'ai le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE `T1` SET `Switch` = (
    SELECT * FROM T2
    LEFT JOIN T1 ON T2.Switch_Type = T1.switch
    )
    You can't specify target table for update in FROM clause mysql
    Est-ce que quelqu'un aurait une idée??

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE `T1` SET `Switch` = (
    SELECT * FROM T2
    LEFT JOIN T1 ON T2.Switch_Type = T1.switch
    )
    Tu veux mettre à jour T1 alors que tu l'utilises dans ta jointure et mySQL ne supporte pas ce procédé. Pour résoudre le problème, tu dois passer par une table intermédiare sur laquelle tu feras ensuite la jointure pour ton update.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut enfin je suis bête
    Ah oui, je n'avais pas mes lunettes,
    le problème était tout simple les colonnes n'étaient pas même nombre dans le select et en plus la jointure ne se fasait pas sur la bonne colonne.
    Voilà la soluce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update  `t1` set `Switch_type`=(
    	select Numéro from t2 
    	where t1.Switch_Type=t2.Switch_Type)
    PS : le fait d'avoir dans le select une relation ne bloque en rien la mise à jour.

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

Discussions similaires

  1. 2 lock tables + 1 for update = mysql dans les choux
    Par rt15 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/07/2012, 16h33
  2. Réponses: 8
    Dernier message: 15/03/2012, 17h31
  3. Réponses: 2
    Dernier message: 26/04/2011, 09h58
  4. Can't specify target in FROM clause
    Par Linio dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/12/2010, 15h00
  5. Réponses: 3
    Dernier message: 07/03/2008, 14h31

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