MySQL具有多个列数的表的联合,由另一个表排序以获取更改的列名

问题描述 投票:-1回答:1

我正在尝试将具有日期范围的多个表合并到一个表中。大多数表遵循相同的列名,但是某些表没有该列,或者其名称已更改。这些表具有公共列,并且这些列中可能只有一列具有更改的名称并且需要更新。我想对多个表(基于列名)使用联合查询,在该表中我们将一个表的列名与另一表进行比较(在初始表中比较旧列名和新列名)。例:联合的多个表:

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 | ………               | …….               | ……..                | ……..          |     

谢谢您的帮助!

php mysql union
1个回答
0
投票

联合中,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
© www.soinside.com 2019 - 2024. All rights reserved.