表a(id,key),其中key用来存放关键字,其值形如value1,value2,用逗号(,)隔开每个关键字。举个例子,表a的记录如下:
(110,'超女,wap,粉丝') 
(123,'粉丝,周杰伦')
(124,'中国移动')
(125,'王菲,周杰伦')
(127,'短信,中国移动,KTV')
(135,'张靓颖,周杰伦')
(168,'球迷,姚明')
... ... ...现要查找出跟任一个记录有匹配关键字的所有记录id来。
即id为123的这条记录需返回关键字有粉丝或周杰伦的所有记录(110,125,135......)求最有效的实现方法。谢谢!

解决方案 »

  1.   

    先用substr()找到记录中用逗号隔开的每个value,在通过这个value用instr()找其他的ID。不知道这个方法笨不笨。
      

  2.   

    select * from a where a.key like '%王菲%'
      

  3.   

    create table find(id int,key varchar2(100));insert into find(id,key) values(110,'超女,wap,粉丝') ;
    insert into find(id,key) values((123,'粉丝,周杰伦') ;
    insert into find(id,key) values((124,'中国移动');
    insert into find(id,key) values((125,'王菲,周杰伦');
    insert into find(id,key) values((127,'短信,中国移动,KTV');
    insert into find(id,key) values((135,'张靓颖,周杰伦');
    insert into find(id,key) values((168,'球迷,姚明');select * from find;
    SQL> select * from find ;                                     ID KEY
    --------------------------------------- --------------------------------------------
                                        110 超女,wap,粉丝
                                        123 粉丝,周杰伦
                                        124 中国移动
                                        125 王菲,周杰伦
                                        127 短信,中国移动,KTV
                                        135 张靓颖,周杰伦
                                        168 球迷,姚明
    select id from find where key like '%周杰伦%' or key like '%粉丝%';
    SQL> select id from find where key like '%周杰伦%' or key like '%粉丝%'
      2  /                                     ID
    ---------------------------------------
                                        110
                                        123
                                        125
                                        135
    是这个结果么?