如何连接具有相同后缀的一组表?

时间:2019-02-04 19:44:01

标签: mysql sql mariadb

所以我不是MYSQL专家,所以我真的需要一些帮助才能弄清楚这一点。我目前有60多个表希望合并到一个表中,这些表中的数据都不匹配,因此我需要将所有表的行合并为一个表。如果这是正确的术语,它们确实具有相同的架构,基本上是相同的格式。它们都以相同的后缀'_dir'结尾。

我认为可行的是这样的东西

使用相同的后缀获取所有表, 对于表列表中的每个表,将行添加或插入到main_table中。

我不知道如何在mysql中执行此操作,甚至可能也不行。我知道我可以使用,

SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_dir%'

以获取所有表的列表,但是如何使用它遍历每个表?

以下是输入数据的示例:

表1:

|  NAME  |          INST_NAME              | Drop
| data 1 | 'this is an example instance1   | 1.5 
| data 1 | 'this is an example of instance2| 2.0

表2:

|   NAME |     INST_NAME                   | DROP
| data 2 | 'this is an example instance1   | 3.0 
| data 2 | 'this is an example of instance2| 4.0

输出表:

|  NAME  |      INST_NAME                  | DROP
| data 1 | 'this is an example instance1   | 1.5 
| data 1 | 'this is an example of instance2| 2.0
| data 2 | 'this is an example instance1   | 3.0 
| data 2 | 'this is an example of instance2| 4.0

请注意,我必须对60多个表执行此操作,而不仅仅是2个表。同一数据库中还有其他具有不同信息的表,因此我不能只将其中的所有表联接起来。

1 个答案:

答案 0 :(得分:2)

您确实需要修复数据结构。您不应将数据存储在具有相同结构的表中-信息应全部放入一个表中。这样您就不会遇到这个问题。

现在,您可以使用所有数据构建视图。您可以使用以下方式为视图生成代码:

SELECT CONCAT('CREATE VIEW vw_dir AS',
              GROUP_CONCAT(REPLACE('SELECT NAME, INST_NAME, `DROP` FROM [T]', '[T]'), TABLE_NAME)
                           SEPARATOR ' UNION ALL '
                          )
             ) as create_view_sql
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_dir%';

然后使用SQL,运行它,您将得到一个名为vw_dir的视图。下次添加表时,需要删除视图然后重新创建它。

解决了这一问题之后,您现在就可以开始考虑如何将所有数据放入一个表中,而又不会使中间表弄乱数据库。