问题描述
嗨,
我需要用其他表中可用的新值更新表。
表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链接来了解清楚
我需要用其他表中可用的新值更新表。
表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数据库将返回连接到外部表的第一个子查询中的值。如果没有一个,你可以通过默认值。
看起来你想设置两个单独的列。但是我真的不明白到底是怎么回事。但是上面的过程应该会对你有所帮助。
无论如何,您使用子查询设置列值。你可以把许多这样的东西放在聚结里。然后,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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。