select TBL1.*, TBL2.*, TBL3.*
from  TBL1
left join TBL2
on TBL1.key = TBL2.key
left join TBL3
on TBL1.key = TBL3.key取得一个结果集
但是其中有一种情况的数据是不想要的
就是如果一条记录在TBL2里面有,但TBL3里面没有,那么这样的数据要排除掉
怎么组织语句能达到这个效果呢

解决方案 »

  1.   

    where tbl2.key is not null and tbl3.key is null
      

  2.   

    select TBL1.*, TBL2.*, TBL3.*
      from TBL1, TBL2, TBL3
     where TBL1.key = TBL2.key(+)
       and TBL1.key = TBL3.key(+)
       and tbl2.key = tbl3.key
      

  3.   

    这样子TBL2里面没有,但TBL3里面有也给排除掉了
      

  4.   

    select TBL1.*, TBL2.*, TBL3.*
    from  TBL1
    left join TBL2
    on TBL1.key = TBL2.key
    right join TBL3
    on TBL2.key = TBL3.key 
      

  5.   

    还是举个例子吧
    TBL1
    t1  t2  t3
    -----------
    a   a   a
    b   b   b
    c   c   c
    d   d   dTBL2
    t1  t4  t5
    -----------
    a   a   a
    b   b   bTBL3
    t1  t6  t7
    -----------
    a   a   a
    c   c   c正常查询结果TBL1中四条记录都会查出来
    但是其中b  b  b的那条,因为在TBL3中不存在,所以这条记录不要
    结果就是应该查出3条记录
    这样子不知道能明白不
      

  6.   

    先tbl3左连接tbl2,再tbl1左连接他们的结果
    SQL> select TBL1.*, t.*
      2    from tbl1,
      3         (select tbl3.t1, tbl3.t6, tbl3.t7, tbl2.t1 tb1, t4, t5
      4            from tbl3, tbl2
      5           where tbl3.t1 = tbl2.t1(+)) t
      6   where tbl1.t1 = t.t1(+);
     
    T1         T2         T3         T1         T6         T7         TB1        T4         T5
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    a          a          a          a          a          a          a          a          a
    c          c          c          c          c          c                                
    d          d          d                                                                 
    b          b          b      
      

  7.   


    select TBL1.*, TBL2.*, TBL3.* 
    from  TBL1 , TBL2 ,TBL3 
    where TBL1.key = TBL2.key and TBL2.key = TBL3.key 
      

  8.   

    刚没看懂这个满足否
    SQL> select TBL1.*, TBL2.*, TBL3.*
      2    from TBL1, tbl2, tbl3
      3   where TBL1.t1 = TBL2.t1(+)
      4     and TBL1.t1 = TBL3.t1(+)
      5     and (tbl1.t1, tbl1.t2, tbl1.t3) not in
      6         (select *
      7            from tbl2
      8          minus
      9          select * from tbl3);
     
    T1         T2         T3         T1         T4         T5         T1         T6         T7
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    a          a          a          a          a          a          a          a          a
    c          c          c                                           c          c          c
    d          d          d      
      

  9.   

    为什么是3条,应该是一条才对啊?如果是你这样的需求,就先对后两表left join
    select m.* , n.* from tbl1 m left join
    (select tbl2.* , tbl3.*(不要key字段) from tbl2 left join tbl3 on tbl2.key = tbl3.key) n
    on m.key = n.key
      

  10.   

    你的结果应该是满足的,谢谢
    不过,数据量大的话notin可能影响效率
    而且我想用标准的SQL,任何数据库都能执行的
    不过还是谢谢你,呵呵