MySQL 로 DELETE 쿼리를 날리는데 아래 에러가 발생했다.
SQL Error [1093] [HY000]: You can't specify target table 'my_table_key' for update in FROM clause
음??????? 내가 아는 delete 문법에 어긋나지 않은 것 같은데...???
하던 중 stackoverflow 에서 나와 같은 문제에 직면한 사람을 만났고,
subquery 를 아래처럼 사용해야 한다고 답변을 받았다. (왤까? 이건 찾아봐야겠다.)
-- error
DELETE
FROM my_table
WHERE my_table_key IN (
SELECT jt.join_table_key
FROM join_table jt
RIGHT JOIN my_table mt ON jt.join_table_key = mt.my_table_key
WHERE jt.where_column IS NULL
);
-- success
DELETE
FROM my_table
WHERE my_table_key IN (
SELECT
sub_table.sub_table_key
FROM (
SELECT jt.join_table_key
FROM join_table jt
RIGHT JOIN my_table mt ON jt.join_table_key = mt.my_table_key
WHERE jt.where_column IS NULL
) sub_table
);
참고 : stackoverflow.com/questions/4471277/mysql-delete-from-with-subquery-as-condition
반응형
'SQL > MySQL' 카테고리의 다른 글
[MySQL] 대용량 데이터 select 시 limit 사용 주의점 (2) | 2020.12.22 |
---|---|
[MySQL] localhost root 비밀번호 까먹었을 때 (mac) (0) | 2020.03.02 |
[MySQL] 대용량 text 파일(.txt) DB 에 업데이트 하는 방법 (feat.행안부) (0) | 2020.01.20 |
unsigned 사용하는 이유 (0) | 2018.10.29 |
MySQL 에서 위도 경도에 알맞는 데이터 타입 (0) | 2018.07.05 |
댓글