1.表1
sid code1 code2
1 1,2 12345
2 2,3 12345
3 1 12345
2.表2
subid name code
1 physics 12345
2 maths 12345
3 biology 12345
4 geography 12345要把表1的字段按逗号字符分开,然后匹配表2的对应subid的name,匹配到多个的话就用逗号隔开,表1 的code2和表2的code要匹配。
想得到的结果如下:
sid code1 code2
1 physics,maths 12345
2 maths,biology 12345
3 physics 12345希望各位大侠能帮忙设计一下SQL语句,谢谢!!
sid code1 code2
1 1,2 12345
2 2,3 12345
3 1 12345
2.表2
subid name code
1 physics 12345
2 maths 12345
3 biology 12345
4 geography 12345要把表1的字段按逗号字符分开,然后匹配表2的对应subid的name,匹配到多个的话就用逗号隔开,表1 的code2和表2的code要匹配。
想得到的结果如下:
sid code1 code2
1 physics,maths 12345
2 maths,biology 12345
3 physics 12345希望各位大侠能帮忙设计一下SQL语句,谢谢!!
解决方案 »
- 跪求create or replace directory image as 'E:\a';
- oracle体系结构LFWR与DWRN进程导致的数据流先后问题
- 求救!!Oracle 10g安装到61%就不动啦!
- 菜鸟求一sql 不胜感激 在线等 急
- Linux下安装ORACLE9I问题,解决即结贴
- pl/sql 7.0 里怎么不能直接导出查询结果到csv文件了??
- 不小心把全局数据库删除了,怎么才能再建一个全局数据库?是不是没有全局数据库就不能建用户的数据库?急!!!
- 什么是左连接、右连接
- *.bck是Oracle的备份文件吧,如何打开呢?
- 求助!关于INSET INTO的用法!
- Oracle包中怎样访问其他数据用户中的表
- PLSQL 存储过程中,怎么把查询到的一批记录放到一个变量中?
SID CODE1 CODE2
-------------------- -------------------- --------------------
1 1,2 12345
2 2,3 12345
3 1 12345
SQL> select * from test2;
SUBID NAME CODE
-------------------- -------------------- --------------------
1 physics 12345
2 maths 12345
3 biology 12345
4 geography 12345
SQL>
SQL> SELECT a.sid,wm_concat(b.name),a.code2
2 FROM test1 a,test2 b
3 WHERE instr(','||a.code1||',',','||b.subid||',')>0
4 GROUP BY a.sid,a.code2;
SID WM_CONCAT(B.NAME) CODE2
-------------------- -------------------------------------------------------------------------------- --------------------
1 physics,maths 12345
2 maths,biology 12345
3 physics 12345
SQL>
SQL> select * from test1;
SID CODE1 CODE2
-------------------- -------------------- --------------------
1 1,2 12345
2 2,3 12345
3 1 12345
SQL> select * from test2;
SUBID NAME CODE
-------------------- -------------------- --------------------
1 physics 12345
2 maths 12345
3 biology 12345
4 geography 12345
SQL>
SQL> SELECT a.sid,wm_concat(b.name),a.code2
2 FROM test1 a,test2 b
3 WHERE instr(','||a.code1||',',','||b.subid||',')>0
4 GROUP BY a.sid,a.code2;
SID WM_CONCAT(B.NAME) CODE2
------------ ----------------------- --------------------
1 physics,maths 12345
2 maths,biology 12345
3 physics 12345
SQL>
不过貌似还有些不完整,因为test2中的code存在不同记录,所以需要加上where条件
and a.code2='xxxxx' and a.code2 = b.code
from a,
(select sys_connect_by_path(subid, ',') nujn,
sys_connect_by_path(name, ',') tpsjn
from (select rownum rn, subid, name from b) b
connect by prior rn < rn) c
where replace(c.nujn, ',') = replace(code, ',')
order by sid;
加上你的
and a.code2='xxxxx' and a.code2 = b.code
SQL> SELECT a.sid,wm_concat(b.name),a.code2
2 FROM test1 a,test2 b
3 WHERE instr(','||a.code1||',',','||b.subid||',')>0
4 AND a.code2=b.code
5 GROUP BY a.sid,a.code2;
SID WM_CONCAT(B.NAME) CODE2
-------------------- -------------------------------------------------------------------------------- --------------------
1 physics,maths 12345
2 maths,biology 12345
3 physics 12345
SQL>
感觉两位大虾的解答,结贴!
我的是枚举后完整比对
因为我的原理是 1 2 3 几个数构造可能的排列
然后和2中的对比
所以是个精确的匹配
你如果要那样的话 1楼可以应该
因为他的是用 instr判断包含关系的 有没有应该没影响