改成这样
SELECT bc, zm, CASE
          WHEN bc IN (SELECT bc
                        FROM bb)
             THEN 'bb'
          ELSE 'wb'
       END AS bz
  FROM tempbc1

解决方案 »

  1.   

    oracle 在9i及以上版本可以用case的。楼主这样写会不会效率低了点?
      

  2.   

    select bc,zm,bz='bb' from tempbc1 where exists(select 1 from bb bc=tempbc1.bc)
    union all
    select bc,zm,bz='wb' from tempbc1 where not exists(select 1 from bb bc=tempbc1.bc)
      

  3.   

    select bc,zm,decode(bb.bc,null,'wb','bb) bz
    from tempbc1,bb
    where tempbc1.bc=bb.bc(+);
      

  4.   

    二楼的写法和我的写法结果一样呀。。只是格式变了而已呀。
    我把四楼的代码拿去执行,结果还是一样呀。用Case是我偷懒的写法呀!
      

  5.   

    select 
        bc,
        zm,
        bz=decode(b.bc,null,'wb','bb') 
    from 
        tempbc1 a,
        (select distinct bc from bb) b
    where
        a.bc =(+) b.bc
      

  6.   

    你又没说叫我帮你优化....我只告诉你在Oracle中为什么报错
      

  7.   

    select 
        bc,
        zm,
        bz=decode(b.bc,null,'wb','bb') 
    from 
        tempbc1 a,
        (select distinct bc from bb) b
    where
        a.bc = b.bc(+)
      

  8.   

    楼写了一个分号
    :)select bc,zm,decode(bb.bc,null,'wb','bb') bz
    from tempbc1,bb
    where tempbc1.bc=bb.bc(+);或者:select bc,zm,nvl2(bb.bc,'bb','wb') bz
    from tempbc1,bb
    where tempbc1.bc=bb.bc(+);
      

  9.   

    如果bb表的bc字段的内容是不重复的话,那么就是用四楼的写法,而且比楼主的写法效率要高不少。
    我的意思就是这样。
      

  10.   

    case语句8.1.6就开始支持了.不过写法有点不一样.