表tab中有cola,colb,colc三个字串串列,关键字 keyx,keyy,keyz;
怎么找出至少3列中任意列包含任意一个关键字的行.
比如row1的colb包含keyz这列就过滤出来有比用where更好方法么?

解决方案 »

  1.   

    我看懂了,但是我不知道,不用WHERE怎么做?
      

  2.   

    更正:表tab中有cola,colb,colc字段都是varchar
      

  3.   

    select * from tab a where 
    (case when a.cola like '%keyx%'  then 1  when t.cola like '%keyy%' then 1 when t.cola like '%keyz%' then 1 else 0 end)=1 
    or
    (case when a.colb like '%keyx%'  then 1  when t.colb like '%keyy%' then 1 when t.colb like '%keyz%' then 1 else 0 end)=1 
    or
    (case when a.colc like '%keyx%'  then 1  when t.colc like '%keyy%' then 1 when t.colc like '%keyz%' then 1 else 0 end)=1 
      

  4.   

    能不能用GROUP BY,问题没看怎么明白
      

  5.   

    select * from table a
    where instr(a.cola||'-'||a.colb||'-'||a.colc,a.keyx)<>0
    or instr(a.cola||'-'||a.colb||'-'||a.colc,a.keyy)<>0
    or instr(a.cola||'-'||a.colb||'-'||a.colc,a.keyz)<>0
    中间的短横线最好是替换成 不可能出现的字符,
      

  6.   


    regexp_instr(cola||colb||colc,'[keyx|keyy|keyz]')>0
      

  7.   

    参考9楼,用regexp_like(cola||colb||colc,'keyx|keyy|keyz')也可以,不知两个那个效率好点?