论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 4382阅读
  • 5回复

[oracle]Oracle中某个字段里的值为逗号隔开的多个值 [复制链接]

上一主题 下一主题
 
发帖
2
黑豆
6
威望
6
贡献值
0
交易币
0
红豆
0
只看楼主 倒序阅读 0 发表于: 2016-07-27
(来源:asi12的博客)字段与另一表有字段关联关系,单位这字段存放的值是多个以逗号隔开的ID,该如何处理的问题,:
表a: a_usr_id(字符串型,关联表b的usr_id)
123,124,125
表b: usr_id ,   usr_name,
123        name1
124        name2
125        name3
直接用用sql语句,不用存储过程如何取得这样的数据集合:    name1,name2,name3
解决方案:  SQL> select * from test;
A_URS_ID
123,125
123,124,125  
SQL> select * from test1;  
URS_ID     URS_NAME
123        name1
124        name2
125        name3
SQL> with split_data as (      
        select key, rn, substr(str, instr(str, ',', 1, rn)+1,                          
       instr(str, ',', 1, rn+1) - instr(str, ',', 1, rn) - 1) str     from (select a_urs_id key, ','||a_urs_id||',' str from test) a,          
       (select rownum rn from dual connect by rownum < 10) b          where instr(str, ',', 1, rn+1) > 0 )    
  select key, substr(max(sys_connect_by_path(urs_name, ',')), 2) a_name      
    from split_data a, test1 b      
    where a.str = b.urs_id      
  start with rn = 1      
connect by key = prior key and rn-1 = prior rn      
group by key;

输出结果如下:
KEY                  A_NAME
123,124,125        name1,name2,name3
123,125               name1,name3

我的问题是如果test 在test1中有的数值不存在,比如test表A_user
_id 出现了 128,123,而128在test1中就没有,我想要的结果name1,但是按照以上程序是找不到name1的,请问这种情况这个程序怎么样写才对,谢谢大神帮忙!



发帖
2
黑豆
6
威望
6
贡献值
0
交易币
0
红豆
0
只看该作者 2 发表于: 2016-07-28
有没有大神帮个忙啊!
发帖
1048
黑豆
618
威望
2921
贡献值
0
交易币
0
红豆
13
只看该作者 3 发表于: 2016-08-05
有无完整编排或截图有点看不清呢!
发帖
2
黑豆
0
威望
2
贡献值
0
交易币
0
红豆
0
只看该作者 4 发表于: 2016-08-12
新人看着很头晕哦。

发帖
541
黑豆
202
威望
562
贡献值
0
交易币
0
红豆
0
只看该作者 5 发表于: 2016-08-12
支持,顶!

内容来自[手机版]
快速回复
限100 字节
 
上一个 下一个