首頁 >資料庫 >mysql教程 >如何解決 MySQL 錯誤 1093:「您無法在 FROM 子句中指定要更新的目標表」?

如何解決 MySQL 錯誤 1093:「您無法在 FROM 子句中指定要更新的目標表」?

DDD
DDD原創
2025-01-22 19:42:10203瀏覽

How to Solve MySQL Error 1093:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn