目前,oracle表中数据如下:
客户      客户组
cust_id   cust_group
1         a,b,c               //表示:客户号为1的客户,同时从属与a组、b组、c组
2         a                   //表示:客户号为1的客户,同时从属与a组
3         a,b,c,d             //表示:客户号为1的客户,同时从属与a组、b组、c组、d组请问:
如何直接使用SQL 查询到同时从属于 b组,c组的数据?
结果应该为:
cust_id   cust_group
1         a,b,c      
3         a,b,c,d  
  

解决方案 »

  1.   

    select * from table1
    where instr(cust_group,'b')>0 
      and instr(cust_group,'c')>0
      

  2.   


    select * from table1 
    where cust_group like '%b%' 
      and cust_group like '%c%'
      

  3.   

    如果可能出现比如ab组这样的非单个字符的组合
    select * from table1 
    where instr(','||cust_group||',',',b,')>0 
      and instr(','||cust_group||',',',c,')>0
    用like也一样
      

  4.   


    like 这样的语句会不会效率很低?
      

  5.   


    还是加上instr(','||cust_group||',',','||'b'||',')>0 保险一些。
      

  6.   

    还是加上instr(','||cust_group||',',','||'b'||',')>0 这样子的操作更完全防止出现
    a,b
    b,c
    这样子情况而系统抓不到数据!
      

  7.   

    select * from table1 
    where ','||cust_group||',' like '%,b,%' 
      and ','||cust_group||',' like '%,c,%';另外,尽量不要用'a,b,c'这样的字符串来描述多对多的关系,因为这违反了关系型数据的标准范式。标准的设计应该是建立另外一个表
    create table t_relationship
    ( cust_id integer
    , cust_group varchar2(10));记录应该是
    cust_id  cust_group 
    1        a
    1        b
    1        c
    2        a
    3        a
    3        b
    3        c
    3        d   你的设计只有在数据量不大,性能没问题的情况下才可行。