안내
본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.
Stackoverflow URL
http://stackoverflow.com/questions/20343239/1093-you-cant-specify-target-table-bookings-for-update-in-from-clause/20343381
질문
다음과 같이 bookings 테이블의 MAX(expire_date)를 구한 뒤 5일을 더한 값을 다시 bookings 테이블에 INSERT하려고 한다.
mysql> INSERT INTO bookings (book_id, member_id, expire_date)
-> VALUES (1, 3, (SELECT Max(expire_date)
-> FROM bookings
-> WHERE member_id = 1) + 5
-> );
ERROR 1093 (HY000): You can't specify target table 'bookings' for update in FROM clause
그런데 보다시피 에러가 발생하고 있다.
답변
다음과 같이 INSERT INTO SELECT 문으로 변경하면 된다.
INSERT INTO bookings
(book_id, member_id, expire_date)
SELECT
1,3, MAX(expire_date) + INTERVAL 5 DAY
FROM bookings
WHERE member_id = 1;
“MySQL” 카테고리의 추천 글
- MySQL IN subquery 성능. IN sub query는 가급적 사용을 피하자
- MySQL의 IN() v.s. EXISTS v.s. INNER JOIN 성능 비교
- MySQL INNER JOIN v.s EXISTS 성능 비교
- JOIN에서 중복된 레코드 제거하기
- MySQL 중복 레코드 관리 방법 - INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE
- MySQL GROUP BY 성능 최적화를 위한 INDEX 설계
- MySQL Query Cache를 빠르게 비우기
- MySQL Plugin에 대한 간단한 소개
- MySQL InnoDB Index Statistics
- MySQL Foreign key 사용 시 주의 사항 (Can’t create table (errno: 150))