【问题标题】:How to aggregate several tables into one in MySQL?如何在 MySQL 中将多个表聚合为一张?
【发布时间】:2016-10-04 06:36:45
【问题描述】:

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

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

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

【问题讨论】:

  • 那么到目前为止你尝试过什么?

标签: mysql sql


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    由于您需要按时间戳值的顺序插入数据,因此您需要在将数据插入第三张表之前对其进行排序

    使用下面的查询

    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 中的列名,如果您想更改名称,请点击下面的查询

    alter table Merge_of_T1_And_T2 rename column "F1" TO "f_merged";
    

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2015-06-05
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多