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 tablena 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 bomWHEREcláusula para limitar os resultados também.