博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 在一条语句中update和select同一张表
阅读量:6074 次
发布时间:2019-06-20

本文共 940 字,大约阅读时间需要 3 分钟。

hot3.png

MySQL不允许SELECT FROM后面指向用作UPDATE的表,有时候让人纠结。本文解释如何UPDATE一张表,同时在查询子句中使用SELECT. 问题描述 假设我要UPDATE的表跟查询子句是同一张表,这样做有许多种原因,例如用统计数据更新表的字段(此时需要用group子句返回统计值),从某一条记录的字段update另一条记录,而不必使用非标准的语句,等等。举个例子:

create table apples(variety char(10) primary key, price int);

insert into apples values('fuji', 5), ('gala', 6);

update apples

set price = (select price from apples where variety = 'gala')
where variety = 'fuji';

错误提示是:ERROR 1093 (HY000): You can't specify target table 'apples' for update in FROM clause. MySQL手册UPDATE documentation这下面有说明 : “Currently, you cannot update a table and select from the same table in a subquery.” 在这个例子中,要解决问题也十分简单,但有时候不得不通过查询子句来update目标。好在我们有办法。

解决办法 既然MySQL是通过临时表来实现FROM子句里面的嵌套查询,那么把嵌套查询装进另外一个嵌套查询里,可使FROM子句查询和保存都是在临时表里进行,然后间接地在外围查询被引用。下面的语句是正确的:

update apples

set price = (
select price from (
select * from apples
) as x
where variety = 'gala')
where variety = 'fuji';

转载于:https://my.oschina.net/u/2000675/blog/718588

你可能感兴趣的文章
[转]大话企业级Android应用开发实战 传感器
查看>>
Selectize – 用于标签和下拉列表功能的选择控件
查看>>
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
查看>>
【技术贴】xp下改变7zip默认关联图标和美化教程
查看>>
XML wsdl soap xslt xsl ide
查看>>
常用文本框内容自动垂直居中,并且默认提示文字可单击为空(实例)!
查看>>
压缩与打包
查看>>
IC开短路测试(open_short_test),编程器测试接触不良、开短路
查看>>
asp.net读取txt并导入数据库
查看>>
paip.android 手机输入法制造大法
查看>>
乐观锁与悲观锁
查看>>
循环对XML文档添加Attribute以及移除Element
查看>>
wget命令解析
查看>>
WebADI_WebADI工作日志设定(案例)
查看>>
ganglia-Monitor
查看>>
提升代码内外部质量的22条经验
查看>>
ClickOnce部署(2):自动更新
查看>>
With Visual Studio, Open Same File In Two Windows, Updates Reflected in Both
查看>>
(转)linux下fork的运行机制
查看>>
基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息
查看>>