首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板