具体点举个例子
现在有表a跟表b
a里id有值‘none’跟空值null
我现在希望连接a里的‘none’跟null到b里userid=‘nobody’,这样可能吗?如果这个设置了,那用group by b.userid之后,count跟sum函数的值是正确的吗?

解决方案 »

  1.   

    当然可以,这样子写的!
    decode函数转化一下!
      

  2.   

    怎么转化啊?我也想过用decode,但是这样的话不是要把整张b表都列举一遍了吗
      

  3.   

    decode(nvl(a,0),'none','nobody',0,'nobody',a)
      

  4.   

    可以在连接之后,使用where条件做筛选
    就是
    select * 
    from a, b 
    where (a.id is null or a.id = 'none') and b.id = 'nobody'
      

  5.   

    [SYS@myoracle] SQL>WITH A AS(
      2  SELECT 'none' ID FROM dual union ALL
      3  SELECT 'none' ID FROM dual union ALL
      4  SELECT NULL ID FROM dual union ALL
      5  SELECT '0' ID FROM dual union ALL
      6  SELECT '1' ID FROM dual
      7  ),B AS(
      8  SELECT 'nobody' userid FROM dual union ALL
      9  SELECT 'nobody' userid FROM dual union ALL
     10  SELECT 'nobodyabc' userid FROM dual
     11  )SELECT A.ID,B.userid,B.cnt
     12     FROM A,(SELECT userid,COUNT(1) cnt FROM B WHERE B.userid='nobody' GROUP BY userid) B
     13    WHERE DECODE(A.id,'none','nobody',NULL,'nobody',NULL) = B.userid;ID   USERID           CNT
    ---- --------- ----------
    none nobody             2
    none nobody             2
         nobody             2
      

  6.   


    SELECT * 
    FROM A,B 
    WHERE B.USERID = 'nobody' 
    AND (A.ID is null or A.ID = 'none')
    在表B中nobody只有一条记录的情况下,可以使用上面的代码,否则需要增加关连条件。
    关连后count或者sum不再正确,因为B中的nobody变成了多条重复的记录。
      

  7.   

    我还是用decode解决了,谢谢大家的帮助~结贴给分了