求一条SQL语句,关于字符分割关联多条记录的问题!谢谢!

yangcomes 2009-10-10 02:47:27
假如现在有两张表:

1.表stuinfo
sid sname subs
1 jack |1|2|
2 marry |1|4|
3 tom |3|

2.表subinfo
subid subname
1 physics
2 maths
3 biology
4 geography

我想把stuinfo的subs字段按|字符分开,然后匹配subinfo的subid,取subname的值,匹配到多个的话就用逗号隔开。
简而言之我想得到的结果如下:
sid sname subname
1 jack physics,maths
2 marry physics,geography
3 tom biology

希望各位大侠能帮忙设计一下SQL语句,谢谢了!
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2009-10-10
  • 打赏
  • 举报
回复
好像 partition有更简单的方法。。。可惜我不会。。
小灰狼W 2009-10-10
  • 打赏
  • 举报
回复
9i里要实现wm_concat功能还没有发现更简单的写法
yangcomes 2009-10-10
  • 打赏
  • 举报
回复

9i有没有其它简单的写法哦。
那几个表是我假设的,现实没有这几张表。
alice鑫鑫 2009-10-10
  • 打赏
  • 举报
回复
#1楼赞你一个,哈哈
alice鑫鑫 2009-10-10
  • 打赏
  • 举报
回复
wm_concat(b.subname) 此函数wmsys.wm_concat()能拼接字符,以,隔开

instr(a.subs,'|'||b.subid(+)||'|')>0 是否存在指定字符串(相当于like)
大概就是这样
小灰狼W 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiaruimin11 的回复:]
select a.sid,a.sname,wm_concat(b.subname) subname
  from stuinfo a,subinfo b
where instr(a.subs,'|'||b.subid(+)||'|')>0
group by a.sid,a.sname
order by sid

[/Quote]
直接拷贝粘贴,敲击下键盘都省略掉了
不知你理解这个代码了没有
jiaruimin11 2009-10-10
  • 打赏
  • 举报
回复
select a.sid,a.sname,wm_concat(b.subname) subname
from stuinfo a,subinfo b
where instr(a.subs,'|'||b.subid(+)||'|')>0
group by a.sid,a.sname
order by sid
小灰狼W 2009-10-10
  • 打赏
  • 举报
回复
9i的
select sid,sname,substr(max(sys_connect_by_path(subname,',')),2) subname
from (
select a.sid,a.sname,b.subname,
row_number()over(partition by a.sid order by rownum)rn
from stuinfo a,subinfo b
where instr(a.subs,'|'||b.subid(+)||'|')>0)
connect by prior rn=rn-1 and prior sid=sid
start with rn=1
group by sid,sname
小灰狼W 2009-10-10
  • 打赏
  • 举报
回复

select a.sid,a.sname,wm_concat(b.subname) subname
from stuinfo a,subinfo b
where instr(a.subs,'|'||b.subid(+)||'|')>0
group by a.sid,a.sname

10g以上的可以这么写

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧