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

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

DDD
DDD原创
2025-01-22 19:42:10203浏览

How to Solve MySQL Error 1093:

MySQL 错误 1093:更新查询限制

问题:

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

查询:

<code class="language-sql">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></code>

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

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

<code class="language-sql">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 < ...;</code>

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

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn