在一个遗留的项目中,遇到一个棘手的问题,例如:表一 Book,里面有字段id,bookno,按常理来说里面存放的应该是一个bookno,但是现在有的数据里面存放了多个bookno,中间用空格隔开,bookno是按照一定格式来输入的!表二 tpi,里面有id,tpino,tpidesc。tpi表里面的tpino只有一个,且都是跟bookno里面的其中一个相对应的,通过什么方法让两张表关联起来得到对应的tpidesc???(备注:就是bookno字段里面有的数据是多个bookno,有的是一个,一个的都能顺利弄出来,多个bookno的就不好弄了)

解决方案 »

  1.   

    select *
    from Book a,tpi b
    where a.bookno like '%'||b.tpino||'%'
      

  2.   

    分隔bookno:
    select id, regexp_substr(bookno, '[^ ]+', 1, level) from Book
    connect by level < length(regexp_replace(bookno, '[^ ]+')) + 1
      

  3.   

    请参考:select * from book t1
    inner join tpi t2
    on t2.tpino like '%' || t1.bookno || '%'
    or t1.bookno like '%' || t2.tpino || '%'如果是db2需要修改上述语句,毕竟语法不一样。
      

  4.   


    select m.* , n.*
    from book m , tpi n
    where instr(','||m.bookno||',' , ','||n.tpino||',') > 0select m.* , n.*
    from book m , tpi n
    where ','||m.bookno||',' like '%,'||n.tpino||',%')