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'进行更新
我该如何克服?
也许您可以将桌子自己连接起来
如果逻辑足够简单以重新构造查询,则丢失子查询并使用适当的选择条件将表连接到自身。这将导致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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。