Mysql) Error Code: 1093. You can't specify target table for update in FROM clause

boingboing·2022년 3월 17일
0

현상

DELETE FROM WHERE 절을 사용했더니 발생.


DELETE FROM sample 
where id not in (
	SELECT ms.id FROM 
    (
		sample as ms
		INNER JOIN process
		ON process.id = sample.processid	
	)
);

원인

MySQL 은 Oracle 과는 달리 UPDATE 나 DELETE 시 자기 테이블의 데이타를 바로 사용 못하므로 아래와 같은 SQL 을 실행시 1093 에러가 발생함.

해결

서브쿼리의 From 구는 임시 테이블을 하나 더 만들어서 해결한다.

DELETE FROM sample 
where id not in (
	SELECT temp2.id 
    FROM 
    (
		SELECT temp1.id
        FROM sample as temp1
		INNER JOIN process
		ON process.id = temp1.processid	
	) as temp2
);

0개의 댓글