Oracle:将两个具有不同列的表组合在一起

Posted

技术标签:

【中文标题】Oracle:将两个具有不同列的表组合在一起【英文标题】:Oracle: Combine Two Tables with Different Columns 【发布时间】:2017-03-15 16:54:29 【问题描述】:

这是表 1:

col_1  col_2  date_1
-----  -----  ------
1      3      2016
2      4      2015

这是表 2:

col_3  col_4  date_2
-----  -----  ------
5      8      2014
6      9      2012

我想要这样的结果:

col_1  col_2  col_3  col_4  date_1  date_2
-----  -----  -----  -----  ------  ------
1      3      NULL   NULL   2016    NULL
2      4      NULL   NULL   2015    NULL
NULL   NULL   5      8      NULL    2014
NULL   NULL   6      9      NULL    2012

有什么解决办法吗?

【问题讨论】:

加入、联合或联合都没有成功。 【参考方案1】:

使用Union AllNull 作为不同的列:

SELECT col_1, col_2, NULL as col_3, NULL as col_4,
       date_1, NULL as date_2
FROM table_1

Union All

SELECT NULL, NULL, col_3, col_4, NULL, date_2
FROM table_2

【讨论】:

我们可以把这个结果合并成一行吗?【参考方案2】:

使用连接:

select t1.col_1,t1.col_2,t2.col_3,t2.col_4,t1.date_1,t2.date_2
from t1
full join t2
on t1.col_1=t2.col_3
order by t1.col_1;

【讨论】:

【参考方案3】:

使用union all:

select col_1, col_2, NULL as col_3, NULL as col_4, date_1, NULL as date_2
from table1
union all
select NULL, NULL, col_3, col_4, NULL, date_2
from table2;

【讨论】:

以上是关于Oracle:将两个具有不同列的表组合在一起的主要内容,如果未能解决你的问题,请参考以下文章

将两个不同的表组合在一起进行查询

在两个不同的表中创建具有相同列的视图 SQL

仅将具有不同值的多个 GROUP_CONCAT() 的结果组合在一起

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?

如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项

如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER