センサーからの履歴データを含む、それぞれが同じ構造を持つ 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;
その結果、「すべての派生テーブルには独自のエイリアスが必要です」というエラーが発生します。
目標は、特定のセンサー値を持つすべてのデバイスのリストをログ (テーブル) の任意の場所に作成することです。
最終的に、テーブルのリストを取得したら、プログラムをループするだけでよいですか、それともより効率的なクエリ構造がありますか?