oracle 联接查询

longtenggdf 2012-07-05 09:05:43
现在有这样一个案例:
表1
字段A 字段B 字段C
111 222 1
111 333 1

表2
字段A 字段B 字段D
111 222 2
111 444 2

用字段A 和字段B作为联接条件 ,希望得到结果集:

字段A 字段B 字段C 字段D
111 222 1 2
111 333 1 0或空
111 444 0或空 2

请问该用什么联接查询来实现

...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
longtenggdf 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

select * from tab1 ,tab2 where tab1.a=tab2.a and tab1.a=tab2.a
union
select * from tab1 ,tab2 where tab1.a=tab2.a(+) and tab1.a=tab2.a(+)
union
select * from tab1 ,tab2 where tab1.a(+)=tab2.a and……
[/Quote]
学习了,谢谢
小德 2012-07-05
  • 打赏
  • 举报
回复
精彩
[Quote=引用 2 楼 的回复:]
SQL code
CREATE TABLE T1(A VARCHAR2(10),B VARCHAR2(10),C VARCHAR2(2));
CREATE TABLE T2(A VARCHAR2(10),B VARCHAR2(10),D VARCHAR2(2));
INSERT INTO T1 VALUES(111,222,1);
INSERT INTO T1 VALUES(111,333……
[/Quote]
小德 2012-07-05
  • 打赏
  • 举报
回复
左连接和右连接的并集
WITH t1 AS(
SELECT 111 ca,222 cb,1 cc FROM dual
UNION ALL
SELECT 111,333,1 FROM dual
),t2 AS (
SELECT 111 ca,222 cb,2 cd FROM dual
UNION ALL
SELECT 111,444,2 FROM dual
)
SELECT t1.ca,t1.cb,t1.cc,t2.cd FROM t1 left join t2 ON t1.ca=t2.ca AND t1.cb=t2.cb
UNION
SELECT t2.ca,t2.cb,t1.cc,t2.cd FROM t1 right join t2 ON t1.ca=t2.ca AND t1.cb=t2.cb
horizonlyhw 2012-07-05
  • 打赏
  • 举报
回复

with t1 as(
select '111' a,'222' b,'1' c from dual
union all
select '111' a,'333' b,'1' c from dual
),
t2 as(
select '111' a,'222' b,'2' d from dual
union all
select '111' a,'444' b,'2' d from dual
)

select t1.a, t1.b, t1.c,t2.d
from t1, t2
where t1.a = t2.a
and t1.b = t2.b

union

select t1.a, t1.b, t1.c,t2.d
from t1, t2
where t1.a = t2.a(+)
and t1.b = t2.b(+)

union

select t2.a, t2.b, t1.c,t2.d
from t1, t2
where t1.a(+) = t2.a
and t1.b(+) = t2.b

q806294478 2012-07-05
  • 打赏
  • 举报
回复
CREATE TABLE T1(A VARCHAR2(10),B VARCHAR2(10),C VARCHAR2(2));
CREATE TABLE T2(A VARCHAR2(10),B VARCHAR2(10),D VARCHAR2(2));
INSERT INTO T1 VALUES(111,222,1);
INSERT INTO T1 VALUES(111,333,1);
INSERT INTO T2 VALUES(111,222,2);
INSERT INTO T2 VALUES(111,444,2);
SELECT * FROM T1;
SELECT * FROM T2;

SELECT NVL(T1.A,T2.A) A,
NVL(T1.B,T2.B) B,
C,
D
FROM T1 FULL JOIN T2
ON T1.A=T2.A AND T1.B=T2.B;
结果为:
A B C D
---------- ---------- -- --
111 222 1 2
111 333 1
111 444 2
mg_chen 2012-07-05
  • 打赏
  • 举报
回复
select * from tab1 ,tab2 where tab1.a=tab2.a and tab1.a=tab2.a
union
select * from tab1 ,tab2 where tab1.a=tab2.a(+) and tab1.a=tab2.a(+)
union
select * from tab1 ,tab2 where tab1.a(+)=tab2.a and tab1.a(+)=tab2.a

这样保证结果是对的
简化点可以只union 后两个

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧