是否可以帮助我使用以下用于多个表连接的更新语句:
update rol
set
rol.role_name = GetCode('ADDRTYPE', ao.Addr_Typ)
FROM table_addr ao ,
table_contact con ,
table_role rol
where con.appid = rol.id
AND ao.use_id = con.con_id
and rol.role_name='Corporate'
我收到Oracle错误:
SQL错误:ORA-00933:SQL命令未正确结束 00933. 00000 - “SQL命令未正确结束”
答案 0 :(得分:1)
鉴于Oracle不支持类似联接的更新,合并声明可能是您最好的选择。
类似的东西:
merge into table_role tgt
using (select ao.addr_typ,
con.appid
from table_addr ao
inner join table_contact con on (ao.use_id = con.con_id)) src
on (tgt.id = src.appid)
when matched then
update set tgt.role_name = getcode('ADDRTYPE', src.addr_typ)
where role_name = 'Corporate';
这假设src查询中的appid
是唯一的。
答案 1 :(得分:0)
更新不支持FROM关键字(See Oracle docs)。我的工作解决方案
是:
update table_role rol
set
role_name = GetCode('ADDRTYPE',
( select distinct ao.Addr_Typ
FROM table_addr ao ,
table_contact con
where con.appid = rol.id
AND ao.use_id = con.id
)
)
where
role_name='Corporate'