如何用join更新表?

时间:2016-05-02 09:39:59

标签: plsql merge sql-update

在oracle db中,我有一个包含2个varchar列的表 - new_val,old_val。 我需要更新多个包含多个列的表,这些列在其值中包含上面第一个表格中的old_val,并用" new_val"替换它们。从那张桌子。

尝试执行以下操作但收到错误:

UPDATE (SELECT a.account_id, b.new_val, b.old_val FROM
any_table a JOIN val_table b ON a.account_id  like    
'%'||b.old_val||'%') SET account_id= 
replace(account_id,old_val ,new_val); 

错误:ORA-01779:无法修改映射到非密钥保留表的列

我理解错误但无法找到合适的解决方案。

谢谢,

1 个答案:

答案 0 :(得分:0)

尝试:

   UPDATE ANY_TABLE a
   SET account_id= (
       SELECT replace(a.account_id,b.old_val ,b.new_val)
       FROM VAL_TABLE b
       WHERE a.account_id like '%'||b.old_val||'%'
   )
   WHERE EXISTS (
      SELECT 1 FROM VAL_TABLE b
      WHERE a.account_id like '%'||b.old_val||'%'
   );