通用示例(在 PHP 中):
借助编程语言构建动态 SQL 或构建 SQL 查询将如下所示(例如在 PHP 中):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
该fetchAll
方法将返回一个数组,其中包含每个选定表的名称。
该implode($glue, $array)
函数采用一个数组并使用$glue
参数连接数组中的每个值 - 通常您采用一个值数组并将它们内爆,$glue = ','
以创建一个逗号分隔的值列表。
在我们的例子中,为了创建一个大查询,它implode
有一个部分查询。$glue
UNION JOIN
一旦最终$query
构建完成,它应该看起来像:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
结果应包含DISTINCT
所有 4000 个表中的所有行。
具体示例(仅 SQL 格式):
SELECT GROUP_CONCAT(
CONCAT('select * from ', table_name)
SEPARATOR ' union '
)
INTO @my_variable
FROM information_schema.tables
WHERE table_schema = 'dbname'
AND table_name LIKE '%_name';
PREPARE my_statement FROM @my_variable;
EXECUTE my_statement;
@my_variable 是一个临时变量,但它只能是标量类型(varchar、int、date、datetime、binary、float、double 等)它不是数组。
该GROUP_CONCAT
函数是一个“聚合函数”,这意味着它接受一个聚合值(类似于数组的概念——在我们的例子中是查询的结果集)并输出一个简单的字符串结果。