MYSQL

[MYSQL] delete 서브쿼리

hg_studio 2022. 2. 14. 21:53
DELETE FROM Recording
WHERE randomResultIdx = (SELECT A.randomResultIdx
                         FROM Recording A join RandomResult B
                         ON A.randomResultIdx = B.randomResultIdx
                         WHERE A.randomResultIdx = ?);

위의 코드처럼 delete 문 WHERE절에 서브쿼리를 넣으려고 했다.

 

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

문제 : 위에처럼 경고문이 뜨고 실행이 되지 않았다.

 

 

문제 발생 원인 : 알고보니, mysql에서 delete문이나 update문을 실행할 때는

자신 테이블의 데이터를 바로 사용하지 못한다고 한다.

지금 나의 쿼리문의 경우에 Recording 테이블의 튜플을 삭제하려고

서브쿼리의 FROM절에도 Recording 테이블을 사용하고 있다.

그래서 작동하지 않았던 것이다.

 

 

해결 방법 : 아래와 같이 서브쿼리를 하나 더 넣어야 한다.

DELETE FROM Recording
WHERE randomResultIdx in (SELECT sub.randomResult
                          FROM (
                         SELECT A.randomResultIdx as randomResult
                         FROM Recording A join RandomResult B
                         ON A.randomResultIdx = B.randomResultIdx
                         WHERE A.randomResultIdx = ?) sub);