日期:2014-05-16  浏览次数:20725 次

Oracle模糊查询
现在有两张表 A表与B表。A表中的ID在B表中是以逗号分隔的形式保存的。现在要做一件事

首先从A表中的Name用Like模糊查询出匹配的ID。然后把这些ID做条件。在B表中查询想对应的记录

例:
A:
  ID Name
 110 张三
 120 张王
 10 李四
 45 赵四

B:
  AID Name
 10,45 开会
 110 工作
 110,45 出差

如:我查询输入“四”条件,得到的应该是10,45这两条记录,然后用这两条记录查询出“开会”,“出差”这两条记录

------解决方案--------------------
SQL> select t.*,t1.name from (
2 select '110' as id, '张三' as name
3 from dual
4 union
5 select '120', '张王'
6 from dual
7 union
8 select '10', '李四'
9 from dual
 10 union
 11 select '45', '赵四' from dual
 12 ) t, (
 13 select distinct b, name
 14 from (select regexp_substr(aid, '[^,]+', 1, level) as b, name
 15 from (select '10,45' as aid, '开会' as name
 16 from dual
 17 union
 18 select '110', '工作'
 19 from dual
 20 union
 21 select '110,45', '出差' from dual)
 22 connect by level <= 4)
 23 where b is not null
 24 ) t1 where t.id = t1.b;
 
ID NAME NAME
--- ---- ----
10 李四 开会
110 张三 出差
110 张三 工作
45 赵四 开会
45 赵四 出差