MySQL不允许select指向一个用作更新的表,有时还有些混乱。当然,还有一个更好的方法来创建一个无限的临时表。在查询子句中

问题描述
我想用更新查询子句的假设看是同桌,这样的原因很多,如与该领域的统计数据更新表(现在需要回归统计使用group子句),从一个记录更新的领域,而非标准的陈述,等的使用,例如 uff1a
复制代码代码如下所示:
创建表苹果(品种char(10)主键,价格int);
插入值(富士苹果,5),('gala ',6);
更新的苹果
价格=(选择价格从苹果那里品种= 'gala)
在富士品种=;

错误的指示是:错误1093(hy000):你不能在更新指定目标table'apples'for更新的X手册下面的手册。
在这个例子中,解决这个问题也是很简单的,但是有时候你需要查询一个子句来更新目标。

和解条款
由于MySQL通过临时表在子句中实现嵌套查询,嵌套查询可以加载到另一个嵌套查询中,该查询使子句能够查询和保存在临时表中,然后在外围间接引用:
复制代码代码如下所示:
更新的苹果
设定价格=(
从中选择价格(
从苹果中选择*
X)
在各种'gala')=
在富士品种=;

如果您想了解更多的机制,请阅读MySQL内部手册相关章节。

未解问题
一个常见的问题是,在()条款优化废物,并改写为相关嵌套查询,有时(经常),导致低性能。嵌套查询到另一个嵌套查询不到相关防止嵌套,除非我狠招。在这种情况下,最好是参加重建查询(如查询重写为加入)。

另一个未解决的问题是临时表被引用了很多次,安装嵌套查询的技术不能解决这些问题,因为它们是在编译时创建的,上面讨论的更新问题是在运行时。