同时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 一系列其他条件);
如下写法: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对应的行上,但是不清楚效率是不是更低了?