DBAtlas · Atlas d'exploitation des bases de données

1093: You can't specify target table 'x' for update in FROM clause (table cible de la mise à jour interdite dans la clause FROM)

MySQL

Que 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 = ...;

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur