- 爱易网页
 
                        - 
                            Oracle教程
 
                        - 求一条SQL用于更新多列。解决方案 
 
                         
                    
                    
                    日期:2014-05-17  浏览次数:20900 次 
                    
                        
                         求一条SQL用于更新多列。
大家请帮忙看看有没有好的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   .....                           ) 
 大家发表一下意见吧?万分感谢。
------解决方案--------------------
刚刚试了一下,在我的oracle 10g上,还真的可以这样用