El problema es que MySQL, por la razón que sea, no te permite escribir consultas como esta:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Es decir, si estás haciendo una UPDATE
/INSERT
/DELETE
en una tabla, no puede hacer referencia a esa tabla en una consulta interna (usted puede sin embargo, haga referencia a un campo de esa tabla externa...)
La solución es reemplazar la instancia de myTable
en la subconsulta con (SELECT * FROM myTable)
, así
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Aparentemente, esto hace que los campos necesarios se copien implícitamente en una tabla temporal, por lo que está permitido.
Encontré esta solución aquí . Una nota de ese artículo:
No quieres simplemente SELECT * FROM table
en la subconsulta en la vida real; Solo quería mantener los ejemplos simples. En realidad, solo debe seleccionar las columnas que necesita en esa consulta interna y agregar un buen WHERE
cláusula para limitar los resultados, también.