1093: You can't specify target table 'x' for update in FROM clause
MySQL의미
UPDATE 또는 DELETE 문에서 갱신/삭제 대상 테이블 자체를 서브쿼리(FROM 안)의 소스로 직접 사용할 수 없다. MySQL은 같은 테이블이 이런 방식으로 대상이자 소스가 되는 것을 허용하지 않는다.
원인
UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...)처럼 서브쿼리가 같은 대상 테이블을 직접 읽음. DELETE에서 같은 테이블을 참조하는 서브쿼리.
해결 방법
MySQL이 별도의 사본으로 취급하도록 서브쿼리를 derived table로 감싸고 새 alias를 붙인다: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); 또는 self-join으로 작성한다: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;