我有两个表T1
和T2
,它们记录了不同类型的系统事件。因此,这两个表具有非常不同的字段。虽然某些字段具有不同的字段名称,但它们基本上包含相同类型的数据。鉴于:
- T1
和T2
都有一个具有相同数据类型的时间戳字段(unix纪元时间)
- T1
有一个名为F1
的字段,T2
有一个名为F2
的字段,它们代表相同类型的数据,但只是以不同方式调用。
我想将两个表聚合成一个这样的表
- T1
和T2
(两种类型的系统事件)"合并"一起排序timestamp
- 有一个名为F_merged
的字段,其中包含T1.F1
和T2.F2
理想情况下,我想完全合并这两个表,以便保留每个表的所有字段,并且在合并后由另一个表引入的字段具有NULL
。希望这是有道理的。
答案 0 :(得分:2)
使用UNION
。下面的查询将timestamp
和F1/F2
合并到结果中的单个列中,但将两个表中的其他列分开。
SELECT timestamp, F1 AS F_merged, col1, col2, col3, NULL AS col4, NULL AS col5
FROM T1
UNION ALL
SELECT timestamp, F2 AS F_merged, NULL, NULL, NULL, col4, col5
FROM T2
答案 1 :(得分:0)
由于您需要按时间戳值的顺序插入数据,因此在将数据插入第三个表之前需要对数据进行排序
使用以下查询
create table Merge_of_T1_And_T2 like T1;
insert into Merge_of_T1_And_T2
select * from (
select timestamp,F1 from T1
union
select timestamp,F2 from T2) as T
order by T.timestamp;
现在Merge_of_T1_And_T2中的列名称看起来就像T1中的列名,如果你想更改名称命中hte查询以下
alter table Merge_of_T1_And_T2 rename column "F1" TO "f_merged";