试试下面的方法,9i环境适用:
SQL> select * from test1;        ID USERID
---------- --------------------
         2 user008
         3 user005
         8 user007SQL> select * from test2;        ID USERID
---------- ----------
         1 user004
         2 user002
         5 user002以下是test1表不为空的情况:select* from 
(select a.id ida,a.userid usera,b.id idb,b.userid userb, count(a.id) over() cnt 
        from test1 a full outer join test2 b 
        on a.id = b.id)
where (cnt = 0) or (cnt<>0 and usera is not null)SQL> 
  6  /       IDA USERA                       IDB USERB             CNT
---------- -------------------- ---------- ---------- ----------
         2 user008                       2 user002             3
         8 user007                                             3
         3 user005                                             3删除test1表中数据:SQL> delete from test1;3 rows deletedSQL> commit;Commit completeselect* from 
(select a.id ida,a.userid usera,b.id idb,b.userid userb, count(a.id) over() cnt 
        from test1 a full outer join test2 b 
        on a.id = b.id)
where (cnt = 0) or (cnt<>0 and usera is not null)SQL> 
  6  /       IDA USERA                       IDB USERB             CNT
---------- -------------------- ---------- ---------- ----------
                                         1 user004             0
                                         5 user002             0
                                         2 user002             0

解决方案 »

  1.   

    count 可以这样用,但不能用IF.IF只能用在PL/SQL.
    Oracle 9i中可以用CASE WHEN ,DECODE 等来做选择.你可以参考一下这方面的资料.
      

  2.   

    select * from
    (select *,rownum as num from 
    (select t1,t2,t3 ...)) s1,
    (select t1,t2,t3 ...) s2 
    where (s1.num is null and s1.t2(+)=s2.t2 )       
    or (s1.num>0 and s1.t2=s2.t2(+))这个可能可以达到你想要的效果.刚才说错了,除了select 后面,count应该只能用在having后面.
      

  3.   

    对了,楼主,你要的是SUM(S1.T1)=0还是COUNT(S1.T1)=0
    因为你是说求和,如果是SUM的话,那就只有用
    select * from
    (select *,sum(s1.t1) over() as num from 
    (select t1,t2,t3 ...)) s1,
    (select t1,t2,t3 ...) s2 
    where (s1.num=0 and s1.t2(+)=s2.t2 )       
    or (s1.num<>0 and s1.t2=s2.t2(+))
      

  4.   

    sum也好OUNT也好,我就是想判断s1的纪录存不存在