MySQL 錯誤 1093:更新查詢限制
問題:
嘗試使用子查詢更新 pers
表時,出現錯誤「You can't specify target table for update in FROM clause」(錯誤 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中文網其他相關文章!