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 = ...;
Más entradas de este motor
- 1050Table already exists (la tabla ya existe)
- 1051Unknown table 'x' (tabla desconocida)
- 1091Can't DROP 'x'; check that column/key exists (no se puede hacer DROP; compruebe que existe la columna/clave)
- 1305PROCEDURE does not exist (el procedimiento no existe)
- 1227Access denied; you need (at least one of) the PRIVILEGE (acceso denegado; se necesita el privilegio)
- 3730Cannot drop table referenced by a foreign key constraint (no se puede eliminar una tabla referenciada por una clave foránea)
- 2013Lost connection to MySQL server during query (se perdió la conexión con el servidor MySQL durante la consulta)