如何用其他表的列值替换列值?

时间:2019-05-25 08:37:46

标签: sql oracle replace sql-update

我有2个表,并想用其他列值中的值替换列值。我想在REPLACE语句中使用Begin..End函数。任何帮助表示赞赏。谢谢

Declare  
  l_id    Varchar2(20);     
  l_name  Varchar2(20);  
  l2_name Varchar2(20);  
Begin   
  Select t1.id,t1.name, t2.name 
    into l_id,l_name,l2_name 
    From t t1 join ta2 t2 
      on t1.id = t2.id ;   

  Select Replace(Replace(t2.name,'Name', t1.name), 'Id', t1.id);  
End   

Table and result

2 个答案:

答案 0 :(得分:0)

不需要使用PL/SQL块,但是可以通过单个update语句来管理它:

update table1 t
   set details = (
  with cte as (
    select *
      from table2 
  )
  select replace(replace(t.details,'Name',cte.name),'Id',cte.ID)
    from cte 
   where cte.DOB = t.DOB
 );

Demo

答案 1 :(得分:0)

您可以使用以下表达式发出select

select t1.id, t1.name, replace(replace(t1.details, 'Name', t2.name), 'Id', t2.id)
into l_id, l_name, l2_name 
from t t1 join
     ta2 t2 
     on t1.id = t2.id ;

注意:查询将返回其生成的尽可能多的行,这可能会导致错误。您的查询不清楚您真正想做什么。

如果您想要update,也许您只是想在其中一个表中重设名称:

update t1
     set name = (select t2.name from ta2 where t2.id = ta.id)
     where exists (select 1 from ta2 where t2.id = ta.id);