DBAtlas · Atlas de operações de banco de dados

1093: You can't specify target table 'x' for update in FROM clause

MySQL

O 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 = ...;

Abrir no DBAtlas →

Mais entradas deste banco