这哥们表设计的太恶心了 
无奈之下请教高手 今天就要交工 table expts 字段:ID, NAME, PBMAJOY1 
table stock 字段:ID, S_GOODS , PANTERS expts中PBMAJOY1字段的值取自stock表中的S_GOODS,并可以为多个S_GOODS的值 
stock中同一个PANTERS值可以对应多个S_GOODS 如何查询出expts表中PBMAJOY1属于同一个PANTERS的数据 注:PBMAJOY1的值可以属于不同的PANTERS 

解决方案 »

  1.   

    并可以为多个S_GOODS的值 这句是什么意思
    select b.PANTERS ,a.PBMAJOY1
    from expts a,stock b
    where a.PBMAJOY1=b.S_GOODS
    order by b.b.PANTERS是这个意思吗
      

  2.   

    这样不行啊 PBMAJOY1可以是单个值也可以有多个值 比如 111,222  是用逗号分开的 没办法a.PBMAJOY1=b.S_GOODS
      

  3.   

    select distinct PBMAJOY1,level,substr(PBMAJOY1,case level when 1 then 1 else instr(PBMAJOY1,',',1,level-1)+1 end,
      instr(PBMAJOY1||',',',',1,level)-case level when 1 then 0 else instr(PBMAJOY1,',',1,level-1) end-1) PBMAJOY1,
      NAME
    from expts
    connect by level<=length(PBMAJOY1)-length(replace(PBMAJOY1,',',''))+1试试用这个查询语句代替expts加入到上述表连接中
    可以明确的是这个效率不高
      

  4.   

    select distinct substr(PBMAJOY1,case level when 1 then 1 else instr(PBMAJOY1,',',1,level-1)+1 end,
      instr(PBMAJOY1||',',',',1,level)-case level when 1 then 0 else instr(PBMAJOY1,',',1,level-1) end-1) PBMAJOY1,
      NAME
    from expts
    connect by level<=length(PBMAJOY1)-length(replace(PBMAJOY1,',',''))+1
    没用的字段去掉..这样
      

  5.   

    ..
    竟然忘了这个函数
    这样就行了
    select b.PANTERS ,count(a.PBMAJOY1) 
    from expts a,stock b 
    where 
     instr(a.PBMAJOY1,b.S_GOODS,1)>0
    group by b.PANTERS 
    order by b.PANTERS