본 포스트는 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
     )

 

300x250

'DB' 카테고리의 다른 글

[Oracle, Tibero] 테이블 레이아웃 조회  (0) 2022.07.11

+ Recent posts