oracle 10g 怎么根据id串查询名字串。

表A有一个varchar2字段names里面存储的都是逗号分隔的id,id类型为string,格式:11111,22222,33333
这些id对应表B中的id字段,我查询的时候想取出表B中的varchar2字段name , 仿照names字段为如下格式:xxxxx,yyyyy,zzzzz。这个用oracle SQL能解决吗

第1个回答  2013-03-22
有两个思路供参考:
1. 使用字符串比较的方法
select *
from 表A a, 表B b
where instr(a.id, ','||b.id||',') <> 0
之所以使用 ','||b.id||',' 是因为如果表A中的ID为:123,456,789 那么B表中的ID为4也只可以查出来,但两边加了逗号以后就不会查出来了
2. 使用分隔字符串的方式,有些烦琐

select *
from 表B t,
(select trim(regexp_substr(id, '[^,]+', 1, IDX)) fid
from 表A a,
(select level IDX
from dual
connect by level <=
(length(id) - length(replace(id, ',', '')) + 1)) b

) s
where t.id = b.fid

这里面用到了 regexp_substr 字符串分隔的方法,你可以看一下
第2个回答  2013-03-22
诸如此类将字符串以逗号分隔后再列转行的例子,网上很多,随便去搜搜就有,这里就不提供了。
纠正一个你这个表设计的问题,按照你这样的逻辑,A和B表应该是N对N的关系,那应该再设计一个中间表,主要字段为aid和bid,用于关联A和B。
第3个回答  2013-03-22
select *
from a,b where a.namelike '%'||b.id||'%'

效率是会慢点,但应该是你想要的
第4个回答  2013-03-22
select * from b where id in(
select replace(regexp_substr(names,'[^,]+',1,level),',',' ') from a
--加上 a 表的筛选条件
connect by level<=length(names)-length(replace(names,'<,>',''))+1 )本回答被网友采纳