大家请帮忙看看有没有好的update方法?
现在有一个表myTable,内容如下:
------------------------------
ID      ParentID     Amount
==============================
A       C          100
B       C          50
C       0           Nil
D       F          20
E       F          30
F       0           Nil
------------------------------我想把 ID=A,B 的两条数据的Amount值根据它们的 ParentID 加总到 ID=C 的Nil处,同样,ID=D,E 加总到 ID=F 的Nil处。只有一列Amount的情况下,用下面这条SQL可以解决这个问题:
update myTable parentTbl
set parentTbl.Amount = (select sum(subTbl.amount)
                        from myTable subTbl
                        where subTbl.ParentID = parentTbl.ID)
where parentTbl.ID in ('C', 'F')但如果myTable表有多个Amount列(>5),如Amount1,Amount2,Amount3....那应该怎么办呢?
因为我想如果像这样继续添加set条件:
update myTable parentTbl
set parentTbl.Amount1 = (子查询)
, parentTbl.Amount2 = (子查询)
, parentTbl.Amount3 = (子查询)
.........
where ....
这样肯定会影响性能的请问大家有没有更好的办法实现这种效果啊?
比如有没有类似下面这种语句的?
update myTable
set (Amount1,Amount2,Amount3....) = ( select sum(amount1)
                                           , sum(amount2)   )
                                           , sum(amount3) .....
                                       from .....         )
大家发表一下意见吧?万分感谢。

解决方案 »

  1.   

    刚刚试了一下,在我的oracle 10g上,还真的可以这样用UPDATE mytable a
       SET (amount, amount2) = (SELECT SUM (amount), sum (amount2)
                                  FROM mytable b
                                 WHERE b.parentid = a.ID)
     WHERE a.parentid = '0'
      

  2.   

    9i 也是可以这样更新的
    UPDATE yangwj_test a
    SET (a3,b3)=(SELECT SUM(a1+a2),SUM(b1+b2)
                  FROM yangwj_test b
                  WHERE b.Id=a.Id)