我正在尝试将具有日期范围的多个表合并到一个表中。大多数表遵循相同的列名,但是某些表没有该列,或者其名称已更改。这些表具有公共列,并且这些列中可能只有一列具有更改的名称并且需要更新。我想对多个表(基于列名)使用联合查询,在该表中我们将一个表的列名与另一表进行比较(在初始表中比较旧列名和新列名)。例:联合的多个表:
Table_1
|Date | New Name1 | New Name2 | OLD Name3 | New NameN |
|1/1/2008 | 73.2 | 43.2 | 33.2 | 13.2 |
|1/2/2008 | 13.2 | 23.2 | empty | 53.2 |
|1/3/2008 | 23.2 | 33.2 | 13.2 | 73.2 |
|X/X/2008 | ……… | ……. | …….. | …….. |
Table_2
|Date | New Name1 | New Name2 | NEW Name3 | OLD Name4 | New NameN |
|1/1/2010 | 12.6 | 13.6 | 23.6 | 13.6 | 13.6
|1/2/2010 | 14.6 | 33.6 | 14.6 | 53.6 | 17.6
|X/X/2010 | ……… | ……. | …….. | …….. |
Table_3
|Date | New Name1 | New Name2 | NEW Name3 | NEW Name4 | New NameN |
|1/1/2013 | 12.2 | 19.2 | 24.2 | 17.2 | 14.2
|1/2/2013 | 24.2 | 23.2 | 15.2 | 43.2 | 17.2
|1/3/2013 | empty | 31.6 | 44.2 | 77.2 | 16.2
|X/X/2013 | ……… | ……. | …….. | …….. |
Table_N
|Date | New Name1 | New Name2 | NEW Name3 | OLD Name4 | New NameN |
|1/1/2018 | 32.4 | 13.4 | 23.4 | 43.4 | 13.4
|1/2/2018 | 14.4 | 33.4 | 14.4 | 53.4 | 17.4
|1/3/2018 | 23.4 | 31.4 | empty | 77.4 | 16.4
|X/X/2018 | ……… | ……. | …….. | …….. |
初始表:列名比较
|Name OLD | Name New |
|OLD Name1 | NEW Name1 |
|OLD Name2 | NEW Name2 |
|OLD Name3 | NEW Name3 |
|OLD Name4 | NEW Name4 |
|OLD NameN | NEW NameN |
来自多个MySQL表的组合信息的预期结果。比较不同表的列-如果我可以让它们在初始表排序的多个表中匹配相同的名称(例如OLD Name3 = NEW Name3),则合并表中的列为United;某些表没有的列被放入合并表的列列表中。意味着新创建的表应该是基于它们的列名的多个表的合并结果,其中包含来自相同列名的所有数据,并且结果来自不具有相同名称的对应列的名称。
合并表
|Date | New Name1 | New Name2 | NEW Name3 = | OLD Name4 = | New NameN |
| OLD Name3 | New Name4 | New NameN |
|1/1/2008 | 73.2 | 43.2 | 33.2 | 13.2 |…………………… |
|1/1/2010 | 12.6 | 13.6 | 23.6 | 13.6 | 13.6
|1/3/2018 | 23.4 | 31.4 | empty | 77.4
|X/X/2018 | ……… | ……. | …….. | …….. |
谢谢您的帮助!
联合中,n个表中可以有n个列。但是每个表都应具有相同的列。如果某些表没有任何表中存在的所需列,并且使用别名,则可以使用别名获得所需的结果。需要它,然后可以使用''作为col_name。这里是示例代码
select * from(
SELECT DATE col1,New Name1 as col2,New Name2 as col3,OLD Name3 as col4,'' as col5,New NameN as col6
from Table_1
UNION
SELECT DATE col1,New Name1 as col2,New Name2 as col3,NEW Name3 as col4,OLD Name4 as col5,New NameN as col6
from Table_2
UNION
SELECT DATE col1,New Name1 as col2,New Name2 as col3,NEW Name3 as col4,OLD Name4 as col5,New NameN as col6
from Table_3
UNION
SELECT DATE col1,New Name1 as col2,New Name2 as col3,NEW Name3 as col4,OLD Name4 as col5,New NameN as col6
from Table_N
) T1