如何在join on 里,根据 查询结果,拼关联语句??表a:
id:
class:肯定有值,如1,2,3
gread:肯定有值,如1,2,3表b:
id:
class:肯定有值,如1,2,3
gread:可能没有值,一个有全有,一个没有全没有,没有值时为空我想当b表中随便一条记录为空时地select a.*,b*
from a 
inner join  b on (a.class  = b.class当b.gread,不为空时, and a.gread = b.gread)哪位高人知道,请告诉我一下,谢谢.

解决方案 »

  1.   


    -- 是这个意思吗?如果不是的贴出相应的源数据和结果,大家好帮你想。SI=1的情况就是代表B.GREAD列中有NULL值的情况:SQL> SELECT * FROM A;     CLASS      GREAD
    ---------- ----------
             1          1
             2          1
             3          1
             1          2
             1          3SQL> 
    SQL> SELECT * FROM B;     CLASS      GREAD
    ---------- ----------
             1          1
             2          1
             3 
             1          2
             1          3SQL> 
    SQL> SELECT A.*,
      2         BB.*
      3    FROM A,
      4         (
      5          SELECT B.*,
      6                 SIGN(COUNT(B.CLASS) OVER()-COUNT(B.GREAD) OVER()) SI
      7            FROM B
      8         )BB
      9   WHERE A.CLASS = BB.CLASS
     10     AND DECODE(SI,1,A.CLASS,A.GREAD) = DECODE(SI,1,BB.CLASS,BB.GREAD)
     11     ;     CLASS      GREAD      CLASS      GREAD         SI
    ---------- ---------- ---------- ---------- ----------
             1          3          1          1          1
             1          2          1          1          1
             1          1          1          1          1
             2          1          2          1          1
             3          1          3                     1
             1          3          1          2          1
             1          2          1          2          1
             1          1          1          2          1
             1          3          1          3          1
             1          2          1          3          1
             1          1          1          3          111 rows selectedSQL> 
      

  2.   

    select a.*,b.* 
    from a 
    inner join  b on 
    a.class  = b.class and a.gread = NVL2(b.gread,b.gread,a.gread)
      

  3.   


    --通过decode可以实现:SELECT A.*, B.*
      FROM A
     INNER JOIN B ON (A.CLASS = B.CLASS 
                      AND DECODE(B.GREAD, NULL, 1, A.GREAD) = DECODE(B.GREAD, NULL, 1, B.GREAD)
                     );
      

  4.   

    select a.*,b.* from a,b where a.class=b.class
           and decode(a.gread,null,0,a.gread)=decode(b.gread,null,0,b.gread);