본문 바로가기
웹 프로그래밍/MySQL

MySQL You can't specify target table 'table_name' for update in From clause 해결

by 끊임없는정진 2023. 1. 11.

▶오류 발생 원인

MySQL에서는 INSERT UPDATE DELETE 등을 수행할 때, 해당 수행하려는 테이블과 서브쿼리로 끌어오려는 테이블이 같을 때 에러를 발생시킨다. 참고로 Oracle의 경우에는 이러한 제약이 없다.

 

▶오류 해결방법

UPDATE 문을 예로 들면 이러한 쿼리문을 보냈을 것이다.

UPDATE member
            SET jj_password = 'guest',
                jj_name = 'test123',
               jj_address=(SELECT jj_address from member where id='admin')
            WHERE jj_id = 'hack123' ";

 

해당 서브쿼리 안에 서브쿼리를 다시 넣어서 값을 끌어다가 사용하면 해당 오류는 해결된다.

UPDATE member
            SET jj_password = 'guest',
                jj_name = 'test123',
                jj_address = (SELECT passwd FROM (SELECT jj_address AS passwd from member where id='admin') A)
            WHERE jj_id = 'hack123' ";

 

댓글