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

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

Mary-Kate Olsen
发布: 2024-12-17 10:59:26
原创
662 人浏览过

How Can I Resolve MySQL Error 1093: Can't Specify Target Table for Update in FROM Clause?

MySQL 错误 1093:了解 FROM 子句中表更新的限制

MySQL 错误“您无法指定目标表 'table_name”当尝试从表自己的 SELECT 语句中修改表时,会出现“for update in FROM 子句”。此限制源于 MySQL 无法在同一操作中同时更新和引用表。

解决错误

要解决此问题,请考虑以下方法:

  • 加入表格它本身:
    重新排列查询以在表上执行自联接,创建临时表。这允许对原始表进行更新:
UPDATE story_category a
INNER JOIN story_category b ON a.category_id = b.category_id
SET a.category_id = ...
登录后复制
  • 更深地嵌套子查询:
    将标识损坏条目的子查询嵌套在另一个子查询中,创建隐式临时表:
UPDATE story_category
SET category_id = (
  SELECT id
  FROM (
    SELECT id
    FROM category
    EXCEPT
    SELECT DISTINCT category_id
    FROM story_category
  ) AS x
)
登录后复制
  • 禁用查询优化器:
    对于 MySQL 版本 5.7.6 及更高版本,优化器可能会尝试删除子查询。为了防止这种情况,请禁用optimizer_switch:
SET optimizer_switch = 'derived_merge=off';
登录后复制

注意:禁用查询优化器不是推荐的长期解决方案,只能用作临时修复。考虑更有效的数据库维护的替代方法。

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

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