Database/Error

[MySQL Error 1093] you can't specify target table ~

콩스프 2023. 1. 3. 11:03

✔ ERROR 1093 (HY000): You can't specify target table 'BOARD' for update in FROM clause

  • MySQL에서 자기 테이블의 데이터를 바로 사용하지 못하여 생기는 오류

 


 

INSERT INTO BOARD VALUES((SELECT IFNULL(MAX(NUM),100)+1 FROM BOARD),?,?)

 

🚨 Error 발생 원인

  • MySQL은 Oracle과 달리 UPDATE , INSERT, DELETE 시 서브쿼리의 FROM 테이블과 업데이트 타겟이 되는 테이블을 같이 사용할 수 없음
  • 여기서 INSERT 하는 타겟 테이블과 서브쿼리의 테이블이 BOARD로 동일하기때문에 에러가 발생하였다.

 

 

🔍 Error 해결방법

 

INSERT INTO BOARD VALUES(
(SELECT NUM FROM ( 
	SELECT IFNULL(MAX(NUM),100)+1 AS NUM FROM BOARD) T_BOARD )
,'test','test');
  • 서브쿼리의 결과를 임시 테이블로 만든 후 실행하면 해결할 수 있음