暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何从其他表中更新列

askTom 2017-06-01
272

问题描述

嗨,
我需要用其他表中可用的新值更新表。
表1包含Old_name New_name列
表2包含New_Name列
表3包含名称列
我的要求是检查table2的名称列值与table1 old_name列,如果匹配更新table2与表1的new_name列值,如果不与table3名称列匹配,如果匹配更新errmsg列与成功msg.如果在table3中找不到,则使用 “在系统中找不到” 文本更新table2 erro_nsg列。

我写了一个示例过程来更新它工作的值。
但是我想知道是否可以使用单个sql语句更新表?
我提供了实时sql链接来了解清楚

专家解答

我真的不明白在您的LiveSQL示例中与TEMPLATE_NAME有什么关系。那列不在你的任何表格里!

无论如何,您使用子查询设置列值。你可以把许多这样的东西放在聚结里。然后,Oracle数据库将返回连接到外部表的第一个子查询中的值。如果没有一个,你可以通过默认值。

create table test1(sno number,old Varchar2(15),new varchar2(15),org varchar2(10),entity varchar2(15));

create table test2(sno number,name Varchar2(15),org varchar2(10),entity varchar2(15),err_msg varchar2(200));

create table test3(sno number,name Varchar2(15),org varchar2(10),entity varchar2(15),err_msg varchar2(200));

insert all 
into test2 values (1,'Donald','ERP','PD',NULL) 
into test2 values (2,'Obama','ERP','PD',NULL) 
into test2 values (3,'Hillary','ERP','PD',NULL) 
into test2 values (4,'John','ERP','PD',NULL) 
into test2 values (5,'Hoper','ERP','PD',NULL) 
select * from dual;

insert all 
into test1 values (1,'Donald','Trump','ERP','PD') 
into test1 values (2,'Obama','Barack','ERP','PD') 
into test1 values (3,'Hillary','Clinton','ERP','PD') 
into test1 values (4,'John Hoper','JHoper','ERP','PD') 
into test1 values (5,'TIM','T Martin','ERP','PD') 
select * from dual;

alter table test3 drop column err_msg;

insert all 
into test3 values (1,'Will Smith','ERP','PD') 
into test3 values (2,'Tiger Woods','ERP','PD') 
into test3 values (3,'Modi','ERP','PD') 
into test3 values (4,'John','ERP','PD') 
into test3 values (5,'TIM','ERP','PD') 
select * from dual;

select * from test2;

SNO  NAME     ORG  ENTITY  ERR_MSG  
1    Donald   ERP  PD               
2    Obama    ERP  PD               
3    Hillary  ERP  PD               
4    John     ERP  PD               
5    Hoper    ERP  PD 

update test2 t2
set    err_msg = coalesce( ( 
    select t1.new from test1 t1 
    where t1.old = t2.name  
    and t1.org = t2.org 
    and t1.entity = 'PD'
  ) , ( 
    select t3.name from test3 t3
    where t3.name = t2.name  
  ),  'Template Not found in System' );
  
select * from test2;

SNO  NAME     ORG  ENTITY  ERR_MSG                       
1    Donald   ERP  PD      Trump                         
2    Obama    ERP  PD      Barack                        
3    Hillary  ERP  PD      Clinton                       
4    John     ERP  PD      John                          
5    Hoper    ERP  PD      Template Not found in System  
复制


看起来你想设置两个单独的列。但是我真的不明白到底是怎么回事。但是上面的过程应该会对你有所帮助。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论