oracle列数据拆分,Oracle随笔之用拆分后的列数据关联表查询

-----------------------建表-------------------------

create table test(id int, plist varchar2(30)) ;

create table p(pid int ,pname varchar2(10));

-----------------------插入测试数据----------------------------

insert into test values(1,'28345|39262|56214');

insert into test values(2,'28345|56214');

insert into test values(3,'56214');

insert into p values(28345,'产品A');

insert into p values(39262,'产品B');

insert into p values(56214,'产品C');

-----------------------------拆分语句及结果------------------------------------

select id, plist,level p_level, regexp_substr(plist , '[^|]+', 1, level) pid

from test

connect by level <= regexp_count(plist , '[^|]+')

and prior id = id

and prior dbms_random.value is not null

-------------------拆分后关联处理语句-------------------

with m as (

--拆分列数据

select id, plist,level p_level, regexp_substr(plist , '[^|]+', 1, level) pid

from test

connect by level <= regexp_count(plist , '[^|]+')

and prior id = id

and prior dbms_random.value is not null

)

select m.id , m.plist, listagg(p.pname,',') within group(order by p_level) rrr

from m inner join p on m.pid = p.pid

group by m.id, m.plist ;

---------- -----------返回结果--------- ----------------------------------------

--1 28345|39262|56214 产品A,产品B,产品C

--2 28345|56214 产品A,产品C

--3 56214 产品C

DROP TABLE test;

DROP TABLE P;

标签:level,into,56214,id,test,拆分,Oracle,随笔,plist

来源: https://www.cnblogs.com/Bokeyan/p/11504921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值