表: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)