有两张表:
A表字段: no number, roles varchar2(40) --A表中roles为B表id的集合
B表字段: id number, positionname varchar2(20)A.B表中有很上千万条数据,先列举几条:
A表数据:
insert into a (id, roles) values(1,'1,2,3');B表数据:
insert into b (id, positionname ) values(1,'项目总监');
insert into b (id, positionname ) values(2,'项目经理');
insert into b (id, positionname ) values(3,'开发人员');现需求:根据A表中的roles字段,查询对应的id和positionname
如A中roles为'1,2,3'
则要求查询出来的结果为:
id positionname
1 项目总监
2 项目经理
3 开发人员我采用循环去做的,结果总只显示最后一条对应的数据。望各位Oracle高手们指导下!
A表字段: no number, roles varchar2(40) --A表中roles为B表id的集合
B表字段: id number, positionname varchar2(20)A.B表中有很上千万条数据,先列举几条:
A表数据:
insert into a (id, roles) values(1,'1,2,3');B表数据:
insert into b (id, positionname ) values(1,'项目总监');
insert into b (id, positionname ) values(2,'项目经理');
insert into b (id, positionname ) values(3,'开发人员');现需求:根据A表中的roles字段,查询对应的id和positionname
如A中roles为'1,2,3'
则要求查询出来的结果为:
id positionname
1 项目总监
2 项目经理
3 开发人员我采用循环去做的,结果总只显示最后一条对应的数据。望各位Oracle高手们指导下!
解决方案 »
- 归档日志文件哪里查找到?
- win7 安装oracle 10g 后需要主机身份验证,但是总是不能验证通过
- 10G,由于下列错误,OracleOraDb10g_home1iSQL*Plus 服务启动失败:网上的办法都不行!
- 请问一下oracle的insert操作是否随着数据量的增加,insert执行的速度就变慢了?
- Oracle 转换SQL(start with)
- Oracle与 SQL Server的异同
- 请问这个插入语句怎么不能执行(触发器/函数不能读)
- 请教高手,Oracle9i在linux下安装的时候产生的文件不能写入问题
- 急问,在线等! oracle数据库中 表的主关键字 存储在系统的什么地方?
- 怎么实现删除再排序?
- 请教一个数据库查询优化的问题
- 在线跪等,请求高手解答这条语句优化问题!!!!
可以使用动态执行的SQL语句去查询。如果讲效率应该改造A表,让roles字段同B表中的id对应,然后使用连接即可。
select * from b
where exists(select 1 from a
where ','||roles||',' like '%,'||b.id||',%')
create table a(id int,roles varchar2(10));
insert into a (id, roles) values(1,'1,2,3'); create table b(id int,positionname varchar2(10));
insert into b (id, positionname ) values(1,'项目总监');
insert into b (id, positionname ) values(2,'项目经理');
insert into b (id, positionname ) values(3,'开发人员');
commit;
select b.* from a,b
where instr(a.roles,b.id)>0
insert into a (id, roles) values(1,'1,2,3'); create table b(id int,positionname varchar2(10));
insert into b (id, positionname ) values(1,'项目总监');
insert into b (id, positionname ) values(2,'项目经理');
insert into b (id, positionname ) values(3,'开发人员');
commit;
--两边加上',',防止出现类似1和11匹配情况
select b.* from a,b
where instr(','||a.roles||',',','||b.id||',')>0