본문 바로가기
IT/Database

[Mysql] (Error) You can't specify target table 'xxx' for update in FROM clause

by 성준하이 2024. 3. 31.
반응형

MySQL에서 delete문에서 서브쿼리를 사용할 때
You can't specify target table 'xxx' for update in FROM clause
라는 에러가 발생했다.

실제 사용하려던 쿼리는 아래와 같다.
DELETE FROM TABLENAME WHERE ID IN (SELECT MIN(ID) FROM TABLENAME);

결과가 제목과 같은 에러였다.


보면 알겠지만 SELECT 이나 DELETE 에 SYNTAX 등의 에러는 보이지 않는다.

이는 MySQL의 특징으로 데이터를 추가나 갱신할 경우 동일한 테이블로 서브쿼리를 사용할 수 없도록 되어 있기 때문이다.
Oracle이나 Postgresql에서는 문제 없이 실행된다.

 

 

해결 방법


서브쿼리의 FROM 구는 임시테이블로 다룰수 있으므로 아래와 같이 SQL을 변경하면 실행할 수 있다.

  • DELETE FROM TABLENAME WHERE ID IN (SELECT ID FROM (SELECT MIN(ID) AS ID FROM TABLENAME) AS A);

 

반응형

댓글