求一条SQL用于更新多列。

clark328 2007-07-04 07:49:28
大家请帮忙看看有没有好的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 ..... )
大家发表一下意见吧?万分感谢。
...全文
770 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
clark328 2007-07-05
  • 打赏
  • 举报
回复
唉,都怪自已学艺不精,多谢各位啦!!
kanxue660 2007-07-05
  • 打赏
  • 举报
回复
经常在用这个格式,只不过右边的查询要保证结果集唯一
sky_810613 2007-07-05
  • 打赏
  • 举报
回复
9i 也是可以这样更新的
UPDATE yangwj_test a
SET (a3,b3)=(SELECT SUM(a1+a2),SUM(b1+b2)
FROM yangwj_test b
WHERE b.Id=a.Id)
sasacat 2007-07-04
  • 打赏
  • 举报
回复
刚刚试了一下,在我的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'

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧