我有一个包含 500 多个表的数据库,每个表都具有相同的结构,其中包含来自传感器的历史数据。我正在尝试提出一个查询,该查询将定位例如传感器 n 超过 x 的所有实例。问题是表是动态的,查询必须能够动态获取表的列表。
我可以查询 information_schema.tables 以获取表列表,如下所示:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'database_name';
我可以使用它在程序中创建一个循环,然后重复查询数据库,但是似乎应该有一种方法让 MySql 进行多表搜索。
我无法制作一个有效的存储过程,但我能找到的示例通常用于在任何列中搜索字符串。我想专门查找所有表中存在的特定列中的数据。我承认我不了解如何正确使用存储过程,也不了解它们是否是解决此问题的适当方法。
循环内的示例查询是:
SELECT device_name, sensor_value
FROM device_table
WHERE sensor_value > 10;
尝试以下方法不起作用:
SELECT device_name, sensor_value
FROM
(
SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name'
)
WHERE sensor_value > 10;
它会导致错误:“每个派生表都必须有自己的别名。”
目标是在其日志(表)中的任何位置列出所有具有给定传感器值的设备。
最终,一旦我获得了表列表,我应该在我的程序中循环,还是有一个更有效的查询结构?