【问题标题】:How to replace column value with other table column value?如何用其他表列值替换列值?
【发布时间】:2019-10-11 16:18:02
【问题描述】:

我有 2 个表,想用其他列值中的值替换列值。我想在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   

【问题讨论】:

  • 听起来你需要 UPDATE 语句而不是 SELECT。除非我遗漏了什么,否则请考虑学习基本的 SQL。
  • @gnudiff 感谢您的评论。我正在学习 SQL 脚本。问题是我不想在我的表中更新它。我只想替换这些值并将其打印以用于测试目的并用于其他目的。
  • 你有没有尝试过common-table-expression的演示,包括下面提供的replace()函数?

标签: sql oracle replace sql-update


【解决方案1】:

无需使用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

【讨论】:

    【解决方案2】:

    您可以使用以下表达式发出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);
    

    【讨论】:

    • @user10990065 。 . . select 查询似乎可以满足您的需求。
    • 感谢您的帮助。我不想更新结果表,而只想用其他表中的值替换列值说占位符。我需要像这样循环表格但卡住了。开始 for i in (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 ; ) loop dbms_output.put_line('name:'|| i.l_name); dbms_output.put_line('name2:'|| i.l2_name);结束循环;结尾; \ 虽然这不起作用,因为我得到了更多符合条件的常见记录。
    • select 语句真的很棒。非常感谢。感谢您宝贵的时间。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2021-02-20
    • 2023-01-26
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多