同时update多个字段,类似下面这样的写法,但是mysql里不支持update tmprpt_ck_sfchzb set (xysl,xyje)=(select sum(sl) 'xysl',sum(je) as 'xyje' from ck_lsz where midx=tmprpt_ck_sfchzb.midx and 一系列其他条件);以前用的是笨法子:update tmprpt_ck_sfchzb set xysl=(select sum(sl) 'xysl' from ck_lsz where midx=tmprpt_ck_sfchzb.midx and 一系列其他条件),xyje=(select sum(je) as 'xyje' from ck_lsz where midx=tmprpt_ck_sfchzb.midx and 一系列其他条件);感觉同样的条件要select两次,是不是效率太差了,要是有3个字段,4个字段呢,那就更慢了吧?网上有通过group by出来一个子查询,再通过join的方法来update,但是这种方法对我没用,因为select求值的时候还有其他很多条件。有没有好方法,可以select一次,出来多个计算出来的值,能够update到对应的行中。也就是说可以实现以下语句的功能?update tmprpt_ck_sfchzb set (xysl,xyje)=(select sum(sl) 'xysl',sum(je) as 'xyje' from ck_lsz where midx=tmprpt_ck_sfchzb.midx and 一系列其他条件);
解决方案 »
- mysql集群(windows XP下) 问题
- 用ODBC连接MySql5.1取数据,出现“Illegal mix of...”的错误,求助。
- 求助!mysql老是重启
- 添加外键约束关系没有生成?
- 关于将MYSQL_ROW类型的输出问题
- 在win2003下怎样修改mysql的连接数?默认是100;同时mysql在win2003下的日志文件在那里?
- 双主键的表如何建?(在线等待...)
- 我如何光把数据库里面的表定义倒出来呢?。。。。
- 求各位大神,这种MYSQL语句是否使用强制索引?
- mysql链接数据库,连接不了
- mysql启动不起来
- SQLyog中,数据查找功能被隐藏,文件菜单中没有,快捷键也不管用,怎么办?
如下写法:UPDATE tmprpt_ck_sfchzb a,(SELECT midx ,SUM(sl) AS xysl,SUM(je) AS xyje FROM ck_lsz GROUP BY midx) b
SET a.xysl=b.xysl ,a.xyje=b.xyje WHERE a.midx = b.midx;子表里面的表名后面可以添加其他条件;
谢谢,这其实就是我帖子里说的先group by再join,但是因为存在很多其他的限制条件,group的字段也是动态的,这个sql语句非常复杂,如果group by的子查询里不限制条件的话,又会全表统计了,很浪费,因为我实际上只需要满足条件的一小部分数据而已。我曾经想过用存储过程,对tmprpt_ck_sfchzb使用游标,循环体内select into两个变量,再update到tmprpt_ck_sfchzb对应的行上,但是不清楚效率是不是更低了?