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