programing

WHERE SELECT 하위 쿼리 오류로 MYSQL 업데이트

telebox 2023. 10. 4. 21:15
반응형

WHERE SELECT 하위 쿼리 오류로 MYSQL 업데이트

선택한 하위 쿼리를 사용하여 작업하는 데 문제가 있습니다.UPDATE. 저는 다음과 같은 시도를 하고 있습니다.

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

어디에foo는 기본 키가 있는 테이블 이름입니다.fooID.bar그리고.bazINT 타입입니다.이 작업을 실행하면 다음 오류가 발생합니다.

Error: A query failed. You can't specify target table 'foo' for update 
in FROM clause

기사를 통해

이 오류의 원인은 MySQL에서 업데이트 기준으로 내부 선택에서 동일한 테이블을 사용하는 경우 테이블에 대한 업데이트를 허용하지 않기 때문입니다.기사는 임시 테이블을 사용하는 해결책을 제공합니다.

이 예를 사용하면 업데이트는 다음과 같습니다.

update foo
set bar = bar - 1
where baz in
(
  select baz from
  (
    select baz
    from foo
    where fooID = '1'
  ) as arbitraryTableName
)

오류 1093 때문에 오류 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000.이 작업은 임시 테이블을 만드는 것입니다.

CREATE TEMPORARY table foo_bak (SELECT baz from foo WHERE fooID='1');

UPDATE foo
  SET foo.bar=foo.bar-1
WHERE foo.baz =
  (
    SELECT baz
    FROM foo_bak
  );

DROP TABLE foo_bak;

경우에 따라 MySQL 변수를 이용할 수도 있습니다. 예:

SET @id1 = (SELECT id FROM foo WHERE name = 'parent');
UPDATE foo SET parent_id = @id1 WHERE name = 'emails';

내가 알기로는 테이블을 업데이트할 때 안전한 업데이트를 하기 위해 Mysql이 잠급니다.데이터를 선택하고 시도하는 테이블을 업데이트할 수 없습니다.

그 문자들은 당신에게 도움이 될 것입니다.

언급URL : https://stackoverflow.com/questions/6944165/mysql-update-with-where-select-subquery-error

반응형