select TBL1.*, TBL2.*, TBL3.*
from TBL1
left join TBL2
on TBL1.key = TBL2.key
left join TBL3
on TBL1.key = TBL3.key取得一个结果集
但是其中有一种情况的数据是不想要的
就是如果一条记录在TBL2里面有,但TBL3里面没有,那么这样的数据要排除掉
怎么组织语句能达到这个效果呢
from TBL1
left join TBL2
on TBL1.key = TBL2.key
left join TBL3
on TBL1.key = TBL3.key取得一个结果集
但是其中有一种情况的数据是不想要的
就是如果一条记录在TBL2里面有,但TBL3里面没有,那么这样的数据要排除掉
怎么组织语句能达到这个效果呢
from TBL1, TBL2, TBL3
where TBL1.key = TBL2.key(+)
and TBL1.key = TBL3.key(+)
and tbl2.key = tbl3.key
from TBL1
left join TBL2
on TBL1.key = TBL2.key
right join TBL3
on TBL2.key = TBL3.key
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条记录
这样子不知道能明白不
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
select TBL1.*, TBL2.*, TBL3.*
from TBL1 , TBL2 ,TBL3
where TBL1.key = TBL2.key and TBL2.key = TBL3.key
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
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
不过,数据量大的话notin可能影响效率
而且我想用标准的SQL,任何数据库都能执行的
不过还是谢谢你,呵呵