开发者社区> 问答> 正文

MySQL错误1093-无法在FROM子句中指定目标表进行更新

story_category我的数据库中有一个表,其中的条目已损坏。下一个查询返回损坏的条目:

SELECT * FROM story_category WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id); 我试图删除它们执行:

DELETE FROM story_category WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id); 但是我得到了下一个错误:

#1093-您无法在FROM子句中指定目标表'story_category'进行更新

我该如何克服?

展开
收起
保持可爱mmm 2020-05-08 10:16:56 542 0
1 条回答
写回答
取消 提交回答
  • 也许您可以将桌子自己连接起来

    如果逻辑足够简单以重新构造查询,则丢失子查询并使用适当的选择条件将表连接到自身。这将导致MySQL将表视为两种不同的事物,从而允许进行破坏性的更改。

    UPDATE tbl AS a INNER JOIN tbl AS b ON .... SET a.col = b.col 或者,尝试将子查询更深地嵌套到from子句中。

    如果您绝对需要子查询,则有一种解决方法,但是由于多种原因,这很丑陋,包括性能:

    UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x); FROM子句中的嵌套子查询创建一个隐式临时表,因此它不算作您要更新的表。

    ...但是要注意查询优化器

    但是,请注意,从MySQL 5.7.6及更高版本开始,优化器可能会优化子查询,但仍然会给您错误。幸运的是,该 optimizer_switch变量可用于关闭此行为。尽管除了短期修复或小型一次性任务外,我不建议这样做。

    SET optimizer_switch = 'derived_merge=off'; 来源:stack overflow

    2020-05-08 10:17:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像