mysql - 如何加入一组后缀相同的表?
问题描述
所以我不是 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 个。在同一个数据库中还有其他具有不同信息的表,所以我不能只加入其中的所有表。
解决方案
你真的需要修复你的数据结构。您不应该将数据存储在具有相同结构的表中——这些信息应该全部放在一个表中。那你就不会有这个问题了。
现在,您可以构建一个包含所有数据的视图。您可以使用以下内容为视图生成代码:
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
. 下次添加表时,您需要删除视图然后重新创建它。
解决了这个问题后,您现在可以开始考虑如何将所有数据放入一个表中,而不会让中间表弄乱您的数据库。
推荐阅读
- ios - SWIFT:将 Firebase 信息映射到对象时,一旦返回,对象就不会被添加到数组中,为什么?
- git - 列出来自凭证助手的 git 凭证
- javascript - Angular中的多个http.post
- svelte - 是否可以直接在 Svelte 3 中绑定对象字段?
- reactjs - 如何解决未渲染的对象列表
- vb.net - VB.NET - 使用 aes 密钥文件从文件中解密已经加密的密码
- angular - 对 Azure Blob 存储帐户中托管的 Angular 应用程序的 URLRewrite 支持
- css - 为什么固定到顶部的导航栏(位置:固定)需要宽度属性?
- windows - 使用连字符名称批量重命名多个文件
- bash - 如何读取 shell 脚本中的两行(在单次迭代中第 1 行、第 2 行 - 下一次迭代应该采用第 2 行、第 3 行……依此类推)