所以我不是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个表。同一数据库中还有其他具有不同信息的表,因此我不能只将其中的所有表联接起来。
答案 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
的视图。下次添加表时,需要删除视图然后重新创建它。
解决了这一问题之后,您现在就可以开始考虑如何将所有数据放入一个表中,而又不会使中间表弄乱数据库。