如何在MySQL中将几个表聚合成一个?

时间:2016-06-04 06:34:34

标签: mysql sql

我有两个表T1T2,它们记录了不同类型的系统事件。因此,这两个表具有非常不同的字段。虽然某些字段具有不同的字段名称,但它们基本上包含相同类型的数据。鉴于: - T1T2都有一个具有相同数据类型的时间戳字段(unix纪元时间) - T1有一个名为F1的字段,T2有一个名为F2的字段,它们代表相同类型的数据,但只是以不同方式调用。

我想将两个表聚合成一个这样的表 - T1T2(两种类型的系统事件)"合并"一起排序timestamp - 有一个名为F_merged的字段,其中包含T1.F1T2.F2

理想情况下,我想完全合并这两个表,以便保留每个表的所有字段,并且在合并后由另一个表引入的字段具有NULL。希望这是有道理的。

2 个答案:

答案 0 :(得分:2)

使用UNION。下面的查询将timestampF1/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";