Welcome 微信登录

首页 / 数据库 / MySQL / Oracle的拆分组合查询

表:msg_content表:msg_contact_person
想要得到的效果
要点分析:结果表和表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              得到结果集:      第二步:与表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结果集:第四步:用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 <= 10Oracle ASM 操作注意事项MySQL主从失败错误Got fatal error 1236解决方法相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数