SELECT * FROM MULTIPLE + DYNAMIC table_name

时间:2016-04-07 07:17:09

标签: 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"。但是,生成的时刻尚不清楚。 有没有办法创建一些可以从表"where table_name like 'ifhcraw%'"

获取所有数据的SQL脚本

1 个答案:

答案 0 :(得分:1)

您可以使用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_CONCAT将所有内容与UNION相关联,因此生成的查询如下所示:

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

请注意,默认情况下GROUP_CONCAT仅限返回1024个字符。如果您有很多这些表格,则需要增加group_concat_max_len才能获得所有内容。