기타/오류 모음

[MySQL] You can't specify target table '테이블 명' for update in FROM clause.

soom2628 2020. 11. 20. 10:00

 

1. 오류 배경 & 내용

UPDATE의 WHERE절에 서브쿼리를 넣어 해당 결과 값을 갖는 것만 업데이트를 하려는데

SQL 1093 에러가 등장했다.

 

사용한 쿼리문(테이블 명과 컬럼 명은 다르게 수정했다)과 에러 내용은 아래와 같다. 

UPDATE
    TB_A
SET
    NAME = '강동원'
WHERE ID IN
	(
            SELECT
            	B.ID
            FROM TB_B AS B
            INNER JOIN TB_A AS A
                    ON A.ID = B.ID
            WHERE A.AGE > 20
        )

 

SQL 에러 발생!!🚨

SQL Error [1093] [HY000]: You can't specify target table '테이블 명' for update in FROM clause

 

 

2. 해결 방법

MySQL은 UPDATE시 자기 테이블의 값을 바로 사용 못 한다.

따라서! 서브쿼리를 한 번 더  ( 로 감싸주어야 한다.

 

UPDATE
    TB_A
SET
    NAME = '강동원'
WHERE ID IN
	(
    	   SELECT
           	C.ID
           FROM
           (
           	SELECT
            	    B.ID AS ID
            	FROM TB_B AS B
            	INNER JOIN TB_A AS A
                	ON A.ID = B.ID
            	WHERE A.AGE > 20
            ) AS C
        )

 

3. 느낀점

쿼리는 알다가도 모를 것..

알아야할 것도 많을 것..