从多个表

时间:2016-05-19 10:56:11

标签: oracle sql-update

是否可以帮助我使用以下用于多个表连接的更新语句:

  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命令未正确结束”

2 个答案:

答案 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'