oracle数据库 单行字段分隔符 专列 in查询

  1. 问题描述:在数据库表关系中,可能会遇到,A表中的b字段存储了B表id;由于A表与B表是一对多的关系,所以为了方便,A表b字段存储B表多个id,并以逗号(,)等字符分隔。
  2. 如果关联查询A中对应B表的内容行,一般会用select * from B id in(…);但是由于1中描述的问题,B id不能直接in,需要将A表b字段进行转换,即单行数据转多行数据,以适用于in的查询语法。
  3. 解决语法:基本语法:
SELECT REGEXP_SUBSTR ('1,2,3', '[^,]+', 1,rownum)
from dual connect by rownum<=LENGTH ('1,2,3') - LENGTH (regexp_replace('1,2,3', ',', ''))+1;
select selectitem_nm,matter_id from fwjc_matter_selectitem where matter_id in (
SELECT REGEXP_SUBSTR ((MATTER_ID), '[^,]+', 1,rownum) from
(SELECT  matter_id from Fwjc_Evaluate_Project where PROJECT_ID=#para(projectId) and project_std = '1'
and end_date between #para(startTime) and
    #para(endTime)
and begin_date between #para(startTime) and
    #para(endTime)
    and update_user=#para(userCode))
 connect by rownum<=LENGTH (MATTER_ID)- LENGTH (regexp_replace(MATTER_ID, ',', ''))+1
)
  1. 参考示例:https://blog.csdn.net/sofeien/article/details/80534557
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值