【发布时间】:2018-07-31 18:15:26
【问题描述】:
create table t1 (v varchar2(500), n number);
Insert into T1 (V,N) values ('a',1);
Insert into T1 (V,N) values ('bb',2);
Insert into T1 (V,N) values ('c',3);
Insert into T1 (V,N) values ('d',4);
create table t2 (v varchar2(500), n number);
Insert into T2 (V,N) values ('a',1);
Insert into T2 (V,N) values ('bb',2);
select * from t1 join t2 on t1.v = t2.v
union all
select * from t1 LEFT join t2 on t1.v = t2.v ;
输出:
a 1 a 1
bb 2 bb 2
a 1 a 1
bb 2 bb 2
d 4 (null) (null)
c 3 (null) (null)
我们能否从 T1 和 T2 的单次扫描(即从没有 UNION ALL 等的单次查询)获得相同的上述输出?想要重写上面的 Select 查询,以便它只扫描表 T1 和 T2 一次并给出相同的结果。请参阅左连接。
由于我们在应用程序中进一步传递输出,因此无法更改输出,根据要求需要重复数据。
【问题讨论】:
-
为什么要前两行两次?您是否正在寻找
full outer join? rextester.com/RMEY58806 -
奇怪的预期结果。
-
加载一次是什么意思?你的意思是在查询中只使用一次?
标签: sql oracle join outer-join