如何根据select statment中的多个连接更新和设置值?

时间:2017-03-17 19:55:57

标签: oracle oracle11g

我想根据select statment中的值更新表invdtl中的列prtnum和revlvl,这里是代码

update invdtl set invdtl.prtnum = usr_prtmst_xref.prtnum,invdtl.revlvl =   
usr_prtmst_xref.colnam ([select                                   
invdtl.prtnum,usr_prtmst_xref.prtnum AS      
crossref,invdtl.revlvl,aremst.arecod,aremst.fwiflg from invdtl
join usr_prtmst_xref 
on usr_prtmst_xref.prtnum = usr_prtmst_xref.prtnum
join invsub
join invlod
join locmst
join aremst 
on aremst.arecod = locmst.arecod
and aremst.wh_id = locmst.wh_id 
on locmst.stoloc = invlod.stoloc
and locmst.wh_id = invlod.wh_id 
on invlod.lodnum = invsub.lodnum 
on invsub.subnum = invdtl.subnum where aremst.arecod = 'EXPR' or      
aremst.fwiflg = '1' and rownum <2])

我想复制select语句返回的两个值prtnum和revlvl,但是存在一些语法问题。

1 个答案:

答案 0 :(得分:0)

  

这里有一堆错误:

     
      
  1. 多列更新的语法基本上是
  2.   
    update blah
    set ( col1, col2 ) = ( select x, y
                            from
                            ...
                            )
  
      
  1. 多个连接的语法基本上是
  2.   
from table1 t1 
join table2 t2 
on t1.col = t2.col 
join table3 t2 on
t2.col = ...
  
      
  1. 乘坐“[”和“]”

  2.   
  3. 谓词rownum<2可能是为了解决您收到的消息,例如“单行子查询返回的值超过1   行“哪个这个谓词”修复了“那个问题,你刚刚得到   第一个随机行;可能不是你想要的。你可能需要   将子查询与更新

  4. 相关联   

我会解决这些基本的语法错误,然后再试一次。