Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何用其他表列值替换列值?_Sql_Oracle_Replace_Sql Update - Fatal编程技术网

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

Sql 如何用其他表列值替换列值?,sql,oracle,replace,sql-update,Sql,Oracle,Replace,Sql Update,我有两个表,希望用其他列值中的值替换列值。我想在Begin..End语句中使用REPLACE函数。谢谢你的帮助。谢谢 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

我有两个表,希望用其他列值中的值替换列值。我想在Begin..End语句中使用REPLACE函数。谢谢你的帮助。谢谢

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   
不需要使用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
 );
不需要使用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
 );
您只需使用以下表达式发出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 t1
     set name = (select t2.name from ta2 where t2.id = ta.id)
     where exists (select 1 from ta2 where t2.id = ta.id);
您只需使用以下表达式发出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 t1
     set name = (select t2.name from ta2 where t2.id = ta.id)
     where exists (select 1 from ta2 where t2.id = ta.id);

听起来您需要UPDATE语句而不是SELECT语句。除非我错过了一些东西,请考虑学习基本的SQL。@ GNUDIFF谢谢您的评论。我正在学习SQL脚本。问题是我不想在我的表中更新它。我只想替换这些值,并将其打印出来用于测试目的,然后用于其他目的。您是否尝试过使用下面提供的包含替换函数的通用表表达式进行演示?听起来您需要的是UPDATE语句而不是SELECT。除非我错过了一些东西,请考虑学习基本的SQL。@ GNUDIFF谢谢您的评论。我正在学习SQL脚本。问题是我不想在我的表中更新它。我只想替换这些值并打印出来用于测试目的,并用于其他目的。您是否尝试过使用公共表表达式(包括下面提供的替换函数)进行演示?@user10990065。select查询似乎符合您的要求。感谢您的帮助。我不想更新结果表,我只想用其他表中的值替换列值,比如占位符。我需要像这样绕桌子一圈,但卡住了。在选择t1.id、t1.name、t2.name中从i开始,从t1中选择l_id、l_name、l2_name,在t1.id=t2.id上加入ta2 t2;循环dbms_输出。将_行'name:'|| i.l_name;dbms_output.put_line'name2:'|| i.l2_name;端环;结束;\虽然这不起作用,因为我得到了更多符合条件的常见记录。select语句非常有效。非常感谢。谢谢您的宝贵时间。@user10990065。select查询似乎符合您的要求。感谢您的帮助。我不想更新结果表,我只想用其他表中的值替换列值,比如占位符。我需要像这样绕桌子一圈,但卡住了。在选择t1.id、t1.name、t2.name中从i开始,从t1中选择l_id、l_name、l2_name,在t1.id=t2.id上加入ta2 t2;循环dbms_输出。将_行'name:'|| i.l_name;dbms_output.put_line'name2:'|| i.l2_name;端环;结束;\虽然这不起作用,因为我得到了更多符合条件的常见记录。select语句非常有效。非常感谢。谢谢你宝贵的时间。