当前位置:  数据库>oracle

Oracle的拆分组合查询

    来源: 互联网  发布时间:2017-04-22

    本文导语: 表:msg_content 表:msg_contact_person 想要得到的效果 要点分析:结果表和表1不同的地方是receiver字段加入了表2的真实姓名 实现方式:    第一步:拆分表1的字段                 SELECT c.msg_content_id AS contentId,         ...

表:msg_content

Oracle的拆分组合查询[图片]

表:msg_contact_person

Oracle的拆分组合查询[图片]

想要得到的效果

Oracle的拆分组合查询[图片]

要点分析:结果表和表1不同的地方是receiver字段加入了表2的真实姓名

实现方式:

   第一步:拆分表1的字段

                SELECT c.msg_content_id AS contentId,
                                       REGEXP_SUBSTR(receiver, '[^;]+', 1, l) AS b
                                  FROM msg_content c,
                                       (SELECT LEVEL l
                                          FROM DUAL
                                        CONNECT BY LEVEL <= 30)
                                 WHERE l <= LENGTH(receiver) -
                                       LENGTH(REPLACE(receiver, ';')) + 1






              得到结果集:

      Oracle的拆分组合查询[图片]

第二步:与表2左连接

     select bb.contentId, bb.b, dd.user_real_name
                          from (SELECT c.msg_content_id AS contentId,
                                       REGEXP_SUBSTR(receiver, '[^;]+', 1, l) AS b
                                  FROM msg_content c,
                                       (SELECT LEVEL l
                                          FROM DUAL
                                        CONNECT BY LEVEL <= 30)
                                 WHERE l <= LENGTH(receiver) -
                                       LENGTH(REPLACE(receiver, ';')) + 1) bb
                          left join msg_contact_person dd on bb.b = dd.account_name
                         where bb.b is not null









结果集:

Oracle的拆分组合查询[图片]

第四步:用wm_concat进行字符组合,并且加入分页  OK完成

select *
  from (select dd.msg_content_id,
               dd.account_name,
               cc.receiver,
               dd.sender,
               dd.realname,
               dd.title,
               dd.content,
               dd.send_time,
               dd.if_del,
               dd.msg_lv
          from msg_content dd,
               (select jj.contentId,
                       replace(wm_concat(jj.b ||
                                         decode(jj.user_real_name,
                                                '',
                                                '',
                                                '(' || jj.user_real_name || ')')),
                               ',',
                               ';') || ';' receiver
                  from (select bb.contentId, bb.b, dd.user_real_name
                          from (SELECT c.msg_content_id AS contentId,
                                       REGEXP_SUBSTR(receiver, '[^;]+', 1, l) AS b
                                  FROM msg_content c,
                                       (SELECT LEVEL l
                                          FROM DUAL
                                        CONNECT BY LEVEL <= 30)
                                 WHERE l <= LENGTH(receiver) -
                                       LENGTH(REPLACE(receiver, ';')) + 1) bb
                          left join msg_contact_person dd on bb.b = dd.account_name
                         where bb.b is not null) jj
                 group by jj.contentId) cc
         where dd.msg_content_id = cc.contentId
         order by dd.msg_content_id desc)
 where rownum <= 10

































Oracle的拆分组合查询[图片]


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle查询出现异常
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • oracle+jsp 多用户查询系统讨论:
  • Oracle查询表、视图、序列等信息查询
  • 关于Oracle的查询问题
  • Oracle用什么语句查询字段?
  • Oracle 查询指定表名的columns
  • linux下通过对文件读取方式查询oracle的版本信息
  • Oracle的大数据量查询结果显示问题。(高手帮忙)
  • Oracle对两个数据表交集的查询
  • Oracle数据库并行查询出错的解决方法
  • Oracle 合并查询
  • 查询与修改Oracle字符集
  • 紧急求救:jsp对Oracle数据库中long 型数据进行模糊查询 如何查?
  • oracle通过行范围查询取4至10行
  • mysql仿oracle的decode效果查询
  • Oracle中查询本月星期5的所有日期列表的语句
  • jsp中在oracle中查询日期类型时sql语句该怎么写啊?
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • oracle查询不含括号及不含指定字符的方法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 虚拟机装Oracle R12与Oracle10g
  • 请问su oracle 和su - oracle有什么不同? iis7站长之家
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3