Créer un site » Tutoriaux » MySQL » You can't specify target table for update in FROM clause

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


Le message "You can't specify target table 'nomtable' for update in FROM clause" peut s'afficher lorsqu'une requête de mise à jour fait appel à une sous-requête contenant le nom de la table à mettre à jour :

UPDATE table1 SET champ=valeur
  WHERE id IN (SELECT table2.id FROM table1, table2...)

Il est possible de contourner cette erreur en passant par une table temporaire , mais il existe une astuce en imbriquant les sous-requêtes (de sorte que MySQL crée lui-même la table temporaire) :

UPDATE table1 SET champ=valeur
  WHERE id IN (SELECT id FROM(
    SELECT table2.id FROM table1, table2...) AS temp
  )

ou encore :

UPDATE table1 T1, (SELECT table2.id FROM table1, table2...) TEMP
SET T1.champ = valeur
WHERE T1.id = TEMP.id