search:

MySQL MAX 값을 동일 테이블에 INSERT하기

05 Mar 2014

안내

본 문서는 블로그의 운영자인 본인이 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” 카테고리의 추천 글