首页 > 数据库 > mysql教程 > 如何解决 MySQL 错误 1093:'您无法在 FROM 子句中指定要更新的目标表”?

如何解决 MySQL 错误 1093:'您无法在 FROM 子句中指定要更新的目标表”?

DDD
发布: 2025-01-22 19:42:10
原创
274 人浏览过

How to Solve MySQL Error 1093:

MySQL 错误 1093:更新查询限制

问题:

尝试使用子查询更新 pers 表时,出现错误“You can't specify target table for update in FROM clause”(错误 1093)。

查询:

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>
登录后复制

改进的解决方案 (更清晰的示例):

为了更清晰地说明解决方案,可以使用 JOIN 语句代替子查询:

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 < ...;
登录后复制

这个方法避免了直接在子查询中引用 pers 表,从而绕过了 MySQL 的限制。 subquery 扮演了一个临时表的角色,允许进行安全的更新操作。 请注意,你需要根据实际的 WHERE 条件补充 ... 部分。

以上是如何解决 MySQL 错误 1093:'您无法在 FROM 子句中指定要更新的目标表”?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板