mysql - SELECT * FROM MULTIPLE+DYNAMIC 表名

标签 mysql sql loops

一个典型的例子是从每天生成的表中获取数据,新名称如下:

select table_name from INFORMATION_SCHEMA.TABLES where table_name like 'ifhcraw%';

ifhcraw_2016_03_31_24
ifhcraw_2016_04_01_8
ifhcraw_2016_04_02_14
ifhcraw_2016_04_03_20
ifhcraw_2016_04_05_8
ifhcraw_2016_04_06_14

如您所见,有一个基于规则的命名约定 - “ifhcraw+year+month+day+hour”。但产生时间不详。 有什么方法可以创建一些 SQL 脚本,它可以从表 "where table_name like 'ifhcraw%'"

中获取所有数据

最佳答案

您可以使用 GROUP_CONCAT将所有表名组合在一个字符串中。

SELECT @queries := GROUP_CONCAT(CONCAT('SELECT * FROM ', table_name) SEPARATOR ' UNION ')
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name LIKE 'ifhcraw%';

PREPARE stmt FROM @queries;
EXECUTE stmt;

第一个查询找到所有匹配的表名,并创建类似 SELECT * FROM <tablename> 的查询.然后它使用 GROUP_CONCATUNION 连接它们,所以结果查询看起来像:

SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3
...

请注意,默认情况下 GROUP_CONCAT仅限于返回 1024 个字符。如果你有很多这样的表,你需要增加 group_concat_max_len 得到一切。

关于mysql - SELECT * FROM MULTIPLE+DYNAMIC 表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36469235/

相关文章:

Java For循环三角形图案

mysql - SQL卡在简单的左连接上

SQL Server 条件 where 子句

sql - Oracle:跨多个列的 "grep"?

r:除了循环似乎别无选择的情况

java - 使用 rnd 值防止无限循环

mysql - 从计算和分组中获取最后的数据查询

mysql - 用join代替子查询有意义吗?

php - 将特定数据库值显示到表中

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?