DataBase

[MySQL] You can't specify target table 에러 발생시

nineDeveloper 2022. 6. 29. 21:54
728x90

MySQL에서 update,delete문에서 서브쿼리를 사용할 경우

You can't specify target table 'xxx' for update in FROM clause

라는 에러가 발생할 경우가 있다

아래의 SQL문 실행 시

UPDATE uesrs 
   SET like = 10, 
       login_count = 0 
 WHERE ID = (SELECT MIN(id) FROM users);

You can't specify target table 'uesrs' for update in FROM clause 에러가 발생한다

MySQL은 데이터를 추가나 갱신할 경우 동일한 테이블로 서브쿼리를 사용할 수 없다

Oracle이나 Postgresql에서는 문제 없이 실행된다

Solution

서브쿼리의 FROM은 임시테이블로 다룰수 있으므로 아래와 같이 SQL을 변경하면 실행할 수 있다

UPDATE uesrs 
   SET like = 10, 
       login_count = 0 
 WHERE ID = (SELECT id FROM (SELECT MIN(id) FROM users) as t);
728x90