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

Oracle 从一个表中选定列的组合,将在其他表中创建主键列值

askTom 2017-09-22
322

问题描述

嗨,

我有一个cust_bug_test表,有2列 (ROOT_CAUSE,BUG_NUMBER),如下所示:

create table cust_bug_test(ROOT_CAUSE VARCHAR(250), BUG_NUMBER NUMBER NOT NULL PRIMARY KEY);
insert into cust_bug_test(ROOT_CAUSE, BUG_NUMBER ) values('This is a #test issue.', 25940149);
insert into cust_bug_test(ROOT_CAUSE, BUG_NUMBER ) values('This is a #timing issue', 25768241);
insert into cust_bug_test(ROOT_CAUSE, BUG_NUMBER ) values('#timing', 26167402);
insert into cust_bug_test(ROOT_CAUSE, BUG_NUMBER ) values('this is #test issue.', 23250474);
insert into cust_bug_test(ROOT_CAUSE, BUG_NUMBER ) values('This is a #code issue', 23742921); 


我有一个查询: 从cust_bug_test中选择regexp_substr(root_cause,'\ #([a-z0-9 _] )',1,1,'i',1) 标签,bug_number从cust_bug_test中获取如下输出:
HASHTAG                        BUG_NUMBER
------------------------------ ----------
test                             25940149
timing                           25768241
timing                           26167402
test                             23250474
code                             23742921



现在我想在上面插入2列和那里的组合 (与 '_' 连接) 到另一个表3列。

其他表名是cust_bug_tag,它的创建方式如下:
create table cust_bug_tag(tag_id VARCHAR(250) NOT NULL PRIMARY KEY, hashtag VARCHAR(250), BUG_NUMBER NUMBER REFERENCES cust_bug_test (BUG_NUMBER));


我希望我的cust_bug_tag有如下这样的条目:

tag_id                     HASHTAG        BUG_NUMBER
--------------   -----------------        ----------
test_25940149             test             25940149
timing_25768241           timing           25768241
timing_26167402           timing           26167402
test_23250474             test             23250474
code_23742921             code             23742921


您能否告诉我完整的查询,它将从第一个表中选择行,并像上面一样在cust_bug_tag中插入这些行。

专家解答

我不明白为什么您需要将值复合成一列?

总的来说,这是个坏主意。改为创建复合主键:

create table cust_bug_tag(
  hashtag VARCHAR(250), BUG_NUMBER NUMBER REFERENCES cust_bug_test (BUG_NUMBER),
  primary key (hastag, bug_nubmer)
);


无论如何,要将值添加到新表中,您只需要插入select:

insert into cust_bug_tag
  select regexp_substr(root_cause,'\#([a-z0-9_]+)',1,1,'i',1)  || '_' || BUG_NUMBER, 
         regexp_substr(root_cause,'\#([a-z0-9_]+)',1,1,'i',1) , BUG_NUMBER 
  from   cust_bug_test;

select * from cust_bug_tag;

TAG_ID           HASHTAG  BUG_NUMBER  
test_25940149    test     25940149    
timing_25768241  timing   25768241    
timing_26167402  timing   26167402    
test_23250474    test     23250474    
code_23742921    code     23742921 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论