반응형
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);
반응형
'IT > Database' 카테고리의 다른 글
[Mysql] [Error] 1075 // auto increment 관련 오류 (19) | 2024.04.13 |
---|---|
[Mysql] Log 설정 (general, slow_query, binary ..) (12) | 2024.04.01 |
[Tibero] Error (TBR-12033) : Lock acquisition failed in nowait mode (23) | 2024.03.30 |
[Mysql] 이벤트 스케쥴러 (Event Scheduler) (21) | 2024.03.29 |
[Mysql] Lock wait timeout exceed (24) | 2024.03.23 |
댓글