MySql中selectfrom一个将要更新的关系目标_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySql中selectfrom一个将要更新的关系目标_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1833字,纯文字阅读大概需要3分钟。
内容图文
![MySql中selectfrom一个将要更新的关系目标_MySQL](/upload/InfoBanner/zyjiaocheng/573/baa03ec6b0ee448d9b8243d43aac9eb3.jpg)
在MySql中如何select from一个将要更新的关系目标:
问题陈述:
在《数据库系统概念第五版》(
+-------------------------+--------------------+------------+
|account_number | branch_name | balance |
+------------------------+---------------------+------------+
|A-101 | Downtown | 500.00 |
|A-102 | Perryridge | 400.00 |
|A-201 | Brighton | 900.00 |
|A-215 | Mianus | 700.00 |
|A-217 | Brighton | 750.00 |
|A-222 | Redwood | 700.00 |
|A-305 | Round Hill | 350.00 |
+------------------------+----------------------+------------+
updateaccount
setbalance = balance * 1.05
wherebalance > (select avg(balance)
fromaccount);
然后就报错了!有没有!如下:
Youcan't specify target table 'account' for update in FROM clause。
错误就是你不能指向并选择一个将要修改或是更新的目标关系。
http://dev.mysql.com/doc/refman/5.0/en/update.html写到:
“Currently,you cannot update a table and select from the same table in asubquery.”
但是很多情况下,我想用一些数据要更新一个关系,而这些数据恰好是通过就指向这个关系的子查询得到的,例如本例子我需要聚集函数算account的balance均值。
解决方法:
MySQL会将from从句中子查询的衍生关系(derivedtable)实体化成一个临时表(temporarytable),所以我们将(selectavg(balance) from account) 再套入一个from从句即可:
updateaccount
setbalance = balance * 1.05
wherebalance >( select avg(tmp.balance)
from (select * from account ) as tmp
)
参考:
http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/
http://dev.mysql.com/doc/refman/5.0/en/update.html
http://forge.mysql.com/wiki/MySQL_Internals
bitsCN.com内容总结
以上是互联网集市为您收集整理的MySql中selectfrom一个将要更新的关系目标_MySQL全部内容,希望文章能够帮你解决MySql中selectfrom一个将要更新的关系目标_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。