oracle中如何实现全联接?就象sqlserver中的full join?
问题点数:20、回复次数:10Top
1 楼xinpingf(白开心)回复于 2002-02-02 15:16:43 得分 0
什么是全联接?Top
2 楼rwq_(笨笨@天外有天山外有山)回复于 2002-02-02 19:43:50 得分 10
在ORACLE中,没有全连接!
只能自己写:
A表:
a(主) b c
1 2 3
B表
e(主) f g
2 3 4
select a.*,b.* from a,b where a.a=b.e(+)
union
select a.*,b* from a,b where b.e not in
(select a from a) and a.e(+)=b.e;Top
3 楼liu7537(数据库模型设计博客连载(http://blog.csdn.net/liu7537))回复于 2002-02-03 23:16:03 得分 0
oracle实现全连接很简单,你只要没有where条件,或者where条件里没有对关联表的限制就行了。Top
4 楼fengwd(无情剑客多情剑)回复于 2002-02-05 08:42:51 得分 0
select * from test_a
a b t
----------- ----------- -----------
1 2 1
2 2 2
3 5 3
8 5 4
select * from test_b
a b c x
----------- ----------- ----------- -----------
1 3 5 1
3 2 5 2
5 5 5 3
select test_a.*,test_b.* from test_a
full join test_b on test_a.a=test_b.a
a b t a b c x
----------- ----------- ----------- ----------- ----------- ----------- -----------
1 2 1 1 3 5 1
2 2 2 NULL NULL NULL NULL
3 5 3 3 2 5 2
8 5 4 NULL NULL NULL NULL
NULL NULL NULL 5 5 5 3
Top
5 楼fengwd(无情剑客多情剑)回复于 2002-02-05 08:43:29 得分 0
上面的查询在oracle中如何实现?Top
6 楼fengwd(无情剑客多情剑)回复于 2002-02-05 14:56:25 得分 0
u pTop
7 楼smartdonkey(聪明的毛驴)回复于 2002-02-05 15:37:08 得分 0
rwq_(风云浪子) 的做法是对得,就是速度可能慢一点。Top
8 楼xinpingf(白开心)回复于 2002-02-05 19:28:20 得分 0
这个简单:
select a.* ,b.*
from test_a a, test_b b
where a.a(+) = b.a(+);Top
9 楼fengwd(无情剑客多情剑)回复于 2002-02-05 19:48:10 得分 0
to : xinpingf(白开心)
ORA-01468: a predicate may reference only one outer-joined table
Top
10 楼fredrick()回复于 2002-02-05 22:58:08 得分 10
我这里就给大家总结一下连接的概念,通常我们把连接说成两张表根据一个条件连接在一起的称为连接,分为等值和条件两种;而上述给为说的是另一种说法,称为外连接,分为三种:
左外连接、右外连接、和全外连接。这三者的区别是:情况1是将第一张表的字段作为参考,如果另一张表对应的字段没有值则以NULL替换;同理,情况2就是以第二张表作为参考;他们都是重新构造新的纪录;而全外连接就是这两个运算的合集。这个只限于我个人的理解,如果有出入清在更正!Top




