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

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

Patricia Arquette
發布: 2025-01-22 20:01:08
原創
745 人瀏覽過

How to Solve MySQL's

MySQL 的「您無法在 FROM 子句中指定要更新的目標表」錯誤問題排查

問題:

在針對表(例如,UPDATE)的 MySQL pers 語句中遇到錯誤“You can't指定目標表在 FROM 子句中進行更新”,這表明 MySQL 的查詢處理存在限制。

範例場景:

假設您有以下UPDATE查詢:

<code class="language-sql">UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL OR gehalt < ... ); </code>
登入後複製

此查詢嘗試根據涉及相同 gehalt 表的條件更新 pers 表中的 pers 列,從而導致錯誤。

為什麼會發生這種情況:

MySQL 的限制可防止 FROM 子句可能導致意外修改的不明確更新。

解:

解決方法涉及使用子查詢建立表的臨時別名:

<code class="language-sql">UPDATE pers P
SET P.gehalt = (SELECT T.gehalt * 1.05 FROM (SELECT * FROM pers) AS T WHERE T.persID = P.persID)
WHERE (P.chefID IS NOT NULL OR P.gehalt < ...);</code>
登入後複製

此修改後的查詢避免了在 pers 語句本身中直接引用 UPDATE。 子查詢(SELECT * FROM pers) AS T建立臨時表別名T,允許UPDATE語句引用必要的數據,而不違反MySQL的規則。

重要提示:

雖然使用 SELECT * 簡化了範例,但為了獲得最佳效能,請僅從子查詢中的 pers 表中選擇所需的欄位。 始終在子查詢中包含相關的 WHERE 子句,以確保高效的資料檢索。 在上面的範例中,WHERE T.persID = P.persID 對於正確符合主 UPDATE 語句和子查詢之間的行至關重要。

以上是如何解決MySQL的「您無法在FROM子句中指定更新目標表」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板