1093: You can't specify target table 'x' for update in FROM clause (table cible de la mise à jour interdite dans la clause FROM)
MySQLQue signifie cette erreur ?
Dans une instruction UPDATE ou DELETE, la table mise à jour/supprimée ne peut pas elle-même être utilisée directement comme source dans une sous-requête (dans FROM). MySQL n'autorise pas une même table à être à la fois cible et source de cette manière.
Cause
Sous-requête lisant directement la même table cible, comme dans UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...) ; sous-requête référençant la même table dans un DELETE.
Comment la corriger
Encapsulez la sous-requête dans une table dérivée et donnez-lui un nouvel alias pour que MySQL la traite comme une copie distincte : UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); Vous pouvez aussi l'écrire sous forme d'auto-jointure : UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;
Autres entrées pour ce moteur
- 1050Table already exists (la table existe déjà)
- 1051Unknown table 'x' (table inconnue)
- 1091Can't DROP 'x'; check that column/key exists (DROP impossible ; vérifiez que la colonne/clé existe)
- 1305PROCEDURE does not exist (la procédure n'existe pas)
- 1227Access denied; you need (at least one of) the PRIVILEGE (accès refusé ; privilège requis)
- 3730Cannot drop table referenced by a foreign key constraint (suppression impossible d'une table référencée par une clé étrangère)
- 2013Lost connection to MySQL server during query (connexion au serveur MySQL perdue pendant la requête)