WHERE SELECT 하위 쿼리 오류로 MYSQL 업데이트
선택한 하위 쿼리를 사용하여 작업하는 데 문제가 있습니다.UPDATE
. 저는 다음과 같은 시도를 하고 있습니다.
UPDATE foo
SET bar=bar-1
WHERE baz=
(
SELECT baz
FROM foo
WHERE fooID='1'
)
어디에foo
는 기본 키가 있는 테이블 이름입니다.fooID
.bar
그리고.baz
INT 타입입니다.이 작업을 실행하면 다음 오류가 발생합니다.
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이 잠급니다.데이터를 선택하고 시도하는 테이블을 업데이트할 수 없습니다.
그 문자들은 당신에게 도움이 될 것입니다.
http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/
http://verysimple.com/2011/03/30/mysql-cant-specify-target-table-for-update-in-from-clause/
언급URL : https://stackoverflow.com/questions/6944165/mysql-update-with-where-select-subquery-error
'programing' 카테고리의 다른 글
자바스크립트에서 숫자의 소수점 수를 구하는 가장 간단한 방법 (0) | 2023.10.09 |
---|---|
jquery를 사용하여 모든 이벤트의 바인딩을 해제하는 방법 (0) | 2023.10.09 |
C 언어의 'volatile' 키워드 (0) | 2023.10.04 |
(1) vs (True) -- (python 2 바이트 코드에서) 왜 차이가 나죠? (0) | 2023.10.04 |
리캡차 스타일링이 깨졌습니다. (0) | 2023.10.04 |