MySQL에서 UPDATE 시 WHERE SELECT 오류가 발생하는 경우

MySQL은 UPDATE 쿼리의 WHERE 조건문에서 같은 테이블명을 사용한 INNER SELECT를 허용하지 않는다고 합니다. 그래서, 같은 테이블을 UPDATE 쿼리의 WHERE조건으로 SELECT해야하는 경우, 다음과 같이 코드를 작성해야 합니다.

 

오류 코드

UPDATE foo
   SET bar=bar-1
 WHERE baz=
      (
       SELECT baz
       FROM foo
       WHERE fooID='1'
      )

 

 

변경된 코드

UPDATE foo
SET bar = bar - 1
WHERE baz in
(
  SELECT baz from
  (
    SELECT baz
    FROM foo
    WHERE fooID = '1'
  ) AS arbitraryTableName
)

 

 

UPDATE 시 위와 같이, 내부 테이블명이 같아지지 않도록 변경해 주어야만 정상적으로 사용할 수 있습니다.

 

재귀때문에 성능에 문제가 생겨서 허용하지 않는건지 왜인지는 모르겠지만.. 그렇다고 하네요. 오늘 처음 알았습니다 -_-;

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.