SQL 오류 (1093): Table 'PM_COMMUTE' is specified twice, both as a target for 'UPDATE' and as a separate source for data
MariaDB(또는 MySQL)를 사용하다가 1093 에러와 마주친다면 서브쿼리 사용이 문제일 것입니다.
아래는 에러가 발생한 쿼리 로그입니다.
UPDATE PM_COMMUTE
SET FROMDATE = '2020.04.29 13:42:43'
WHERE WORKDAY = (
SELECT MAX(WORKDAY) WORKDAY
FROM PM_COMMUTE
WHERE USERCD = 'admin'
AND FIXYN = 'N'
)
MariaDB는 Oracle과 달리 UPDATE 또는 DELETE 시에 서브쿼리의 FROM 테이블과 업데이트 타겟이 되는 테이블을 같이 사용할 수 없습니다. 따라서 서브쿼리를 한번더 감싸줘서 Alias 처리를 해주면 에러를 해결할 수 있습니다.
UPDATE PM_COMMUTE
SET FROMDATE = '2020.04.29 13:42:43'
WHERE WORKDAY = (
SELECT A.WORKDAY
FROM (
SELECT MAX(WORKDAY) WORKDAY
FROM PM_COMMUTE
WHERE USERCD = 'admin'
AND FIXYN = 'N'
) A
)