DBAtlas · Atlas de operaciones de bases de datos

1093: You can't specify target table 'x' for update in FROM clause (no se puede usar la tabla de destino del update en FROM)

MySQL

¿Qué significa?

En una sentencia UPDATE o DELETE, la propia tabla que se actualiza/elimina no puede usarse directamente como origen en una subconsulta (en FROM). MySQL no permite que la misma tabla sea a la vez destino y origen de esta forma.

¿Por qué ocurre?

Una subconsulta que lee directamente la misma tabla de destino, como en UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...); una subconsulta que referencia la misma tabla en un DELETE.

Cómo solucionarlo

Envuelva la subconsulta en una tabla derivada y asígnele un alias nuevo para que MySQL la trate como una copia separada: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); Como alternativa, escríbala como un self-join: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;

Abrir en DBAtlas →

Más entradas de este motor