Oracle多列派生列使用联接进行更新

时间:2019-01-17 19:11:09

标签: oracle

我有一个基础表,我想根据其他各种表的COALESCED值(得出的值)来更新5个值。在SQL Server(tsql)中,我将执行以下操作:

Update tab1
set col1 = COALESCE(tab2.val1,tab3.val1,tab4.val1),
col2 = COALESCE(tab2.val2,tab3.val3,tab4.val4),
col3 = COALESCE(tab2.val3,tab3.val3,tab4.val3)
from tab1
left outer join tab2 on tab1.joincol = tab2.joincol
left outer join tab3 on tab1.joincol = tab3.joincol
left outer join tab4 on tab1.joincol = tab4.joincol

我已经阅读了很多关于如何在Oracle中执行此操作的帖子,但是我无法让他们中的任何一个在上述情况下都能正常工作!合并将不起作用,因为tab1中可能有多个行连接在一起,并且需要从派生值进行更新。当我尝试使用“更新(选择...)集”时,即使没有使用任何视图,也会收到“ ORA-01732:对该视图不合法的数据操作”。

请帮助!这一天大部分时间都在打我的头!真的不喜欢我使用Oracle!

1 个答案:

答案 0 :(得分:1)

像这样吗?

update tab1 set
  (col1, col2, col3) = 
  (select COALESCE(tab2.val1, tab3.val1, tab4.val1),
          COALESCE(tab2.val2, tab3.val3, tab4.val4),
          COALESCE(tab2.val3, tab3.val3, tab4.val3)
   from tab2 left outer join tab1 on tab1.joincol = tab2.joincol
             left outer join tab3 on tab1.joincol = tab3.joincol
             left outer join tab4 on tab1.joincol = tab4.joincol 
  );