栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL错误1093

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL错误1093

更新:此答案涵盖了常规错误分类。 有关如何最好地处理OP的确切查询的更具体的答案,请参阅此问题的其他答案

在MySQL中,您不能修改在SELECt部分​​中使用的同一表。
在http://dev.mysql.com/doc/refman/5.6/en/update.html中记录了此行为。


也许您可以将桌子自己连接起来

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

UPDATE tbl AS aINNER 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';

感谢 Peter V.Mørch在评论中提供的建议。

示例技术来自Baron
Schwartz,该书最初发表于Nabble,在此释义并扩展。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号