我有一个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;
它会导致错误:“每个派生表都必须有自己的别名。”
目标是在日志(表)的任何位置列出所有具有给定传感器值的设备。
最后,我应该在获得表列表后在程序中循环,还是有一个更有效的查询结构?