UPDATE 문을 사용하려는데 아래와 같은 Error를 맞닥뜨릴 수 있다.

 

Error Code: 1093. You can't specify target table '테이블명' for update in FROM clause

 

요점 부터 이야기하면 UPDATE 문 WHERE절에 조건을 서브쿼리로 실행하려고 할 경우

 

UPDATE 문의 대상이 되는 테이블을 서브쿼리의 대상이 되는 테이블로 사용할 수 없기 때문에 발생하는 문제다.

 

즉 UPDATE 하려는 테이블(자기자신)을 서브쿼리의 테이블로 지정할 수 없다는 이야기다.

 

 

 

UPDATE
        TB_BOOK
   SET
        bookmark = concat(bookmark, concat(",",`책갈피에 저장할 페이지의 인덱스 값`))
 WHERE
        book_idx = (SELECT
                            A.book_idx
                      FROM
                            TB_BOOK_PAGE A
                 LEFT JOIN
                            TB_BOOK B ON (A.book_idx = B.book_idx)
                     WHERE
                            book_page_idx = `책갈피에 저장할 페이지의 인덱스 값`)

 

 

예를 들어 책의 정보가 담긴 테이블이 있고 하위 개념으로 해당 책의 각 페이지들의 정보가 담긴

 

테이블이 있는 형태로 설계된 DB구조가 있다고 가정하고

 

특정 페이지를 책갈피에 저장하려고 책 테이블의 bookmark 라는 컬럼에

 

누적저장 방식으로 책의 페이지를 넣으려고 하고

 

UPDATE 문의 파라미터 값이 해당 페이지의 index = 페이지 number 였을 때

 

위 처럼 UPDATE문을 작성하였는데 실행이 되지 않는다.

 

이런 경우에는 아래 처럼 서브쿼리를 임시 테이블로  한번더 감싸주면 된다.

 

UPDATE
        TB_BOOK
   SET
        bookmark = concat(bookmark, concat(",",`책갈피에 저장할 페이지의 인덱스 값`))
 WHERE
        book_idx = (SELECT
                            tb_temp.book_idx
                      FROM
                            (SELECT
                                    A.book_idx
                              FROM
                                    TB_BOOK_PAGE A
                         LEFT JOIN
                                    TB_BOOK B ON (A.book_idx = B.book_idx)
                             WHERE
                                    book_page_idx = `책갈피에 저장할 페이지의 인덱스 값`) AS tb_temp)

 

 

 

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기