MySQL은 SELECT FROM이 UPDATE에 사용된 테이블을 가리키는 것을 허용하지 않으며 이는 때때로 혼란스럽습니다. 물론 끝없이 임시 테이블을 만드는 것보다 더 좋은 방법이 있습니다. 이 글에서는 테이블을 UPDATE하는 동시에 쿼리절에서 SELECT를 사용하는 방법에 대해 설명합니다.
문제 설명
내가 UPDATE하려는 테이블이 쿼리절과 동일한 테이블이라고 가정합니다. 예를 들어, 통계 데이터로 테이블의 필드를 업데이트하고(이 경우 통계 값을 반환하려면 그룹 절을 사용해야 함) 비-사용 없이 한 레코드의 필드를 다른 레코드로 업데이트합니다. 표준 진술 등 예:
apples 테이블 만들기(variety char(10) 기본 키, 가격 int);
사과 값에 삽입('fuji', 5), ('gala', 6);
사과 업데이트
가격 설정 = (품종 = 'gala'인 사과에서 가격 선택)
품종 = 'fuji';
오류 메시지는 다음과 같습니다. ERROR 1093(HY000): 대상 테이블 '을 지정할 수 없습니다. FROM 절의 업데이트에 대해 apples'를 사용합니다. MySQL 수동 UPDATE 문서에서는 "현재 테이블을 업데이트하고 하위 쿼리의 동일한 테이블에서 선택할 수 없습니다."라고 설명합니다.
이 예에서는 문제를 해결하는 것이 매우 간단합니다. 하지만 때로는 쿼리 절을 통해 대상을 업데이트해야 하는 경우도 있습니다. 다행히도 해결책이 있습니다.
해결책
MySQL은 임시 테이블을 통해 FROM 절에 중첩 쿼리를 구현하므로 중첩 쿼리를 다른 중첩 쿼리로 로드하면 FROM 절 쿼리를 만들고 저장이 모두 임시 테이블에서 수행되고 간접적으로 수행됩니다. 주변 쿼리에서 참조됩니다. 다음 설명은 정확합니다.
update apples
가격 설정 = (
select Price from (
select * from apples
) as x
where Variety = 'gala')
where Variety = 'fuji';
위 내용은 MySQL 데이터베이스를 선택하면서 업데이트 작업을 수행하는 방법에 대한 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고하시기 바랍니다. )!