본 포스트는 MySQL에서 UPDATE나 DELETE를 하려고 할 때 발생하는 에러(오류코드 1093)에 대한 설명입니다. 상세 오류 메시지는 You can't specify target table 'TABLE' for update in FROM clause 와 같이 표시됩니다.
오라클이나 티베로 등에서는 아래와 같은 Query가 잘 동작합니다.
UPDATE TBP_STAGE_HIST
SET COMPLETE = 'Y'
WHERE ST_DTM =
( SELECT MAX(ST_DTM)
FROM TBP_STAGE_HIST)
위 예시에는 UPDATE를 사용했지만 DELETE 역시 잘 동작합니다. 하지만 MySQL에서는 1093 에러 코드를 리턴합니다. 내용을 보면 You can't specify target table 'TABLE' for update in FROM clause 로, UPDATE나 DELETE 작업을 수행할 때 자기 자신을 직접 참조할 수 없도록 합니다.
위의 경우 해결은 간단합니다. Sub Query에 자기 자신을 사용할 경우 인라인 뷰 형태로 만들어서 사용하시면 됩니다. 위의 Query를 수정하면 아래와 같은 방식입니다.
UPDATE TBP_STAGE_HIST
SET COMPLETE = 'Y'
WHERE ST_DTM =
( SELECT ST_DTM
FROM (SELECT MAX(ST_DTM) ST_DTM
FROM TBP_STAGE_HIST) A
)
'DB' 카테고리의 다른 글
[Oracle, Tibero] 테이블 레이아웃 조회 (0) | 2022.07.11 |
---|