【发布时间】:2016-02-02 23:33:34
【问题描述】:
在我的数据库中,我有 20 个表。
其中一个名为“Connections”的表包含两列“TableName”和“NextHi”
+--------+-------------+
| NextHi | TableName |
+--------+-------------+
| 43 | Page |
+--------+-------------+
| 32 | User |
+--------+-------------+
所以在“TableName”列中是其他表的名称。
每个其他表都有“Id”列
我需要的是脚本,它将遍历数据库中的所有表,并且每个表都返回一行 3 列:
- 表名
- MaxID - 表的
- 当前表的“连接”表中的 NextHi 值
所以结果应该是这样的:
+-----------+-------------+-------+
| TableName | NextHi | MaxId |
+-----------+-------------+-------+
| Page | 43 | 435 |
+-----------+-------------+-------+
| User | 32 | 768 |
+-----------+-------------+-------+
我有返回这个的脚本,但它对每个表都有选择,并且表名是硬编码的:
(
SELECT
"User" as `TableName`,
`Connections`.`NextHi`,
(SELECT MAX(`Id`) FROM `User`) as `MaxId`
FROM `Connections`
WHERE `Connections`.`TableName` = "User"
)
UNION ALL (
SELECT
"Page" as `TableName`,
`Connections`.`NextHi`,
(SELECT MAX(`Id`) FROM `Page`) as `MaxId`
FROM `Connections`
WHERE `Connections`.`TableName` = "Page"
)
但我需要这个循环作为一个选择
编辑:
更正:它并不需要只有一个 Select,但它应该比我现在拥有的更简单
【问题讨论】:
-
所以你的表 Connections 包含你所有的数据库表的列表?
-
是的,它包含我所有数据库表的列表。同样在该列表中,还有一两个额外的表名不会退出我的数据库。但如果这很重要,我们可以忽略它,我可以删除它们。
-
我认为这在一个选择中是不可行的,因为您需要使用准备好的语句:stackoverflow.com/questions/19510490/…
-
能够读取mysql自己的元数据会有帮助吗?例如SELECT table_name FROM information_schema.tables WHERE table_schema='yourdb'