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中文网其他相关文章!