1093: You can't specify target table 'x' for update in FROM clause
MySQLO que significa?
Em uma instrução UPDATE ou DELETE, a própria tabela que está sendo atualizada/excluída não pode ser usada diretamente como origem em uma subconsulta (no FROM). O MySQL não permite que a mesma tabela seja destino e origem dessa forma.
Por que acontece?
Uma subconsulta lendo diretamente a mesma tabela de destino, como em UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...); uma subconsulta referenciando a mesma tabela em um DELETE.
Como resolver
Envolva a subconsulta em uma derived table e dê a ela um novo alias para que o MySQL a trate como uma cópia separada: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); Como alternativa, escreva-a como um self-join: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;