J'ai une base de données avec plus de 500 tables, chacune avec une structure identique, qui contient des données historiques provenant de capteurs. J'essaie de trouver une requête qui va localiser, par exemple, toutes les instances où le capteur n dépasse x. Le problème est que les tables sont dynamiques, la requête doit pouvoir obtenir dynamiquement la liste des tables.MySql: interroger plusieurs tables dynamiques identiques
Je peux interroger INFORMATION_SCHEMA.TABLES pour obtenir une liste des tables, comme ceci:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'database_name';
Je peux l'utiliser pour créer une boucle dans le programme, puis interroger à plusieurs reprises mais la base de données, il semble que MySql devrait faire une recherche sur plusieurs tables.
Je n'ai pas été en mesure de faire une procédure stockée qui fonctionne, mais les exemples que je peux trouver sont en général pour la recherche d'une chaîne dans une colonne. Je veux trouver spécifiquement des données dans une colonne spécifique qui existe dans toutes les tables. J'avoue que je ne comprends pas comment utiliser correctement les procédures stockées ni si elles constituent la solution appropriée à ce problème.
Une requête par exemple dans la boucle serait:
SELECT device_name, sensor_value
FROM device_table
WHERE sensor_value > 10;
Essayer ce qui suit ne fonctionne pas:
SELECT device_name, sensor_value
FROM
(
SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name'
)
WHERE sensor_value > 10;
Il en résulte une erreur: « Chaque table dérivée doit avoir son propre alias. "
L'objectif est d'avoir une liste de tous les appareils qui ont eu une valeur de capteur donné lieu partout dans leur journal (tableau).
En fin de compte, si je viens de boucle dans mon programme une fois que j'ai obtenu une liste de tables, ou est-il une structure de requête qui serait plus efficace?
Pour moi, c'est essentiellement la même chose que la boucle que je fais actuellement dans le code du programme. Je dois encore générer les noms de table pour chaque union. C'est une solution de travail, mais malheureusement pas ce que j'espérais. – JYelton