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