Orcale多个字典ID保存在一个字段

本文介绍了一种在数据库中根据新闻表的CatID字段将一条记录拆分为多条记录的方法,利用了REGEXP_SUBSTR函数按逗号分割字符串,并通过LEVEL进行循环遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新闻表与新闻分类表为N:N的关系,在新闻发布的时候如何选择多个栏目,栏目ID通过逗号分隔,保存在新闻表的CatID字段中,这样就会造成二个表之间的关联不方便,但是前人代码是这样的,只好在此基础上进行修改:

这里写图片描述

现在需要根据CatID字段中字段信息,将一条数据分成多条数据(N>=1)


select a.ID,
       a.NewsType,
       a.templet,
       b.classid,
       a.datalib,
       a.SavePath,
       a.FileName,
       a.FileEXName,
       a.NewsID,
       a.CheckStat
  from BUSI_NEWS a, BUSI_NEWS_CLASS b
 where a.newsid = '257166335141'
   and b.classid in
       (select NVL(REGEXP_SUBSTR(CLASSID, '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS CLASSID
          from (select a.ID,
                       a.NewsType,
                       a.templet,
                       a.classid,
                       a.datalib,
                       a.SavePath,
                       a.FileName,
                       a.FileEXName,
                       a.NewsID,
                       a.CheckStat
                  from BUSI_NEWS a
                 where a.newsid = '257166335141')
        CONNECT BY LEVEL <= LENGTH(CLASSID) -
                   LENGTH(REGEXP_REPLACE(CLASSID, ',', '')) + 1)

这里写图片描述


  • 在数据库开发过程中会有一个通用的函数可以解决开发过程原本很复杂的写法,需要多了解一些系统函数
  • 像这样的数据库设计,是保存二条数据,还是保存一条数据?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值