oracle查询多个id,oracle 一个字段存多个ID(以逗号","分割),连表查询并也放入一个字段中...

欢迎转载但请注明出处:https://blog.csdn.net/qq_42440234/article/details/84101412

TABLE_A:

e743dcc0b4295792f60186251204b575.png

TABLE_B:

ae363a41729f4f30e4d7829e789bf025.png

TABLE_A中的的WATER_RANGE存的是TABLE_B的ID,以逗号区分

下图为查询后的结果:

a1153b163d2e98675a550220473425dc.png

SQL如下:

WITH TABLE_A_ AS

(

SELECT ID,WATER_RANGE ,LEVEL C_LEVEL,REGEXP_SUBSTR(WATER_RANGE , '[^,]+', 1, LEVEL)

CANAL_ID FROM TABLE_A

CONNECT BY LEVEL <= REGEXP_COUNT(WATER_RANGE , '[^,]+')

AND PRIOR ID = ID

AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

)

SELECT A.ID , A.WATER_RANGE, LISTAGG(TO_CHAR(B.CANAL_NAME),',') WITHIN

GROUP(ORDER BY C_LEVEL) CANAL_NAME FROM TABLE_A_ A

INNER JOIN TALBE_B B ON A.CANAL_ID = B."ID" GROUP BY A.ID, A.WATER_RANGE ;

注:LISTAGG里的TO_CHAR视情况而定,我查询出来乱码才加的TO_CHAR,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值