如何加入一组表有相同后缀的?

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

所以我没有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.也有在同一个数据库中不同的其他信息表,所以我不能只是加入所有表在那里。

mysql sql mariadb
1个回答
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视图。添加了一个表,在下一次你需要删除该视图,然后重新创建它。

有了这个解决了,你现在可以开始考虑如何将所有数据放在一个表中,而无需中间表弄乱你的数据库。

© www.soinside.com 2019 - 2024. All rights reserved.