>데이터 베이스 >MySQL 튜토리얼 >MySQL 오류 1093: 'FROM 절에서 업데이트할 대상 테이블을 지정할 수 없습니다'를 해결하는 방법은 무엇입니까?

MySQL 오류 1093: 'FROM 절에서 업데이트할 대상 테이블을 지정할 수 없습니다'를 해결하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-22 19:42:10272검색

How to Solve MySQL Error 1093:

MySQL 오류 1093: 쿼리 제한 업데이트

질문:

하위 쿼리를 사용하여 pers 테이블을 업데이트하려고 하면 "FROM 절에서 업데이트할 대상 테이블을 지정할 수 없습니다"라는 오류가 발생합니다(오류 1093).

쿼리:

<code class="language-sql">UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL
OR gehalt <p><strong>原因:</strong></p><p>MySQL 不允许在子查询中引用正在更新的同一表。</p><p><strong>解决方案:</strong></p><p>要解决此问题,请将外部表引用(pers)在子查询中用嵌套子查询括起来:</p>
```sql
UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL
OR gehalt <p><strong>说明:</strong></p><p>通过使用 `SELECT * FROM pers` 创建嵌套子查询,我们隐式地创建了一个临时表,可以在子查询中引用它,而不会违反 MySQL 的限制。这允许我们使用所需的条件更新 `pers` 表。</p></code>

개선된 솔루션(보다 명확한 예):

솔루션을 더 명확하게 설명하기 위해 하위 쿼리 대신 JOIN 문을 사용할 수 있습니다.

<code class="language-sql">UPDATE pers p
INNER JOIN (SELECT chefID, gehalt FROM pers) AS subquery ON p.chefID = subquery.chefID AND p.gehalt = subquery.gehalt
SET p.gehalt = p.gehalt * 1.05
WHERE p.chefID IS NOT NULL OR p.gehalt < ...;</code>

이 방법은 하위 쿼리에서 pers 테이블을 직접 참조하지 않으므로 MySQL 제한 사항을 우회합니다. subquery 임시 테이블 역할을 하여 안전한 업데이트 작업이 가능합니다. 실제 WHERE 상태를 토대로 ... 부분을 보완해야 한다는 점 참고하세요.

위 내용은 MySQL 오류 1093: 'FROM 절에서 업데이트할 대상 테이블을 지정할 수 없습니다'를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.