O problema é que o MySQL, por qualquer motivo fútil, não permite que você escreva consultas como esta:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Ou seja, se você estiver fazendo um
UPDATE
/INSERT
/DELETE
em uma tabela, você não pode fazer referência a essa tabela em uma consulta interna (você pode no entanto, faça referência a um campo dessa tabela externa ...) A solução é substituir a instância de
myTable
na subconsulta com (SELECT * FROM myTable)
, assim UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Isso aparentemente faz com que os campos necessários sejam copiados implicitamente em uma tabela temporária, então é permitido.
Encontrei esta solução aqui . Uma nota desse artigo:
Você não quer apenasSELECT * FROM table
na subconsulta na vida real; Eu só queria manter os exemplos simples. Na realidade, você deve selecionar apenas as colunas necessárias nessa consulta mais interna e adicionar um bomWHERE
cláusula para limitar os resultados também.