sql >> Base de Datos >  >> RDS >> Mysql

No puede especificar la tabla de destino para la actualización en la cláusula FROM

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.