我有一个基础表,我想根据其他各种表的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!
答案 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
);