2010-01-14 4 views
2

je peux obtenir toutes les tables colonne contenant « nom d'hôte » en utilisant:Comment puis-je retourner une liste de toutes les tables dans une base de données avec le nom d'hôte de colonne contenant le nom d'hôte = hostA

select select table_name from information_schema.columns 
where column_name='hostname'; 

Si je connaissais le nom de tous les tableaux que je pourrais utiliser un syndicat comme:

SELECT * FROM ((SELECT hostname FROM table1) 
    UNION (SELECT hostname FROM table2) 
    ... 
    UNION (SELECT hostname FROM tableN)) AS hosttable where hostname = 'hostA'; 

Mais je ne sais pas comment combiner les deux concepts ci-dessus sans utiliser un script externe ou une procédure stockée.

Répondre

1

Les requêtes SQL doivent lister explicitement les tables et les colonnes. Vous ne pouvez pas écrire une requête qui prend le nom d'une table à partir du résultat d'une autre colonne recherchée dans la même requête. La solution est celle que vous avez déjà trouvée: écrivez une requête SQL par rapport au schéma d'informations pour obtenir une liste de noms de tables, puis utilisez ces résultats pour créer une deuxième requête SQL, en interpolant les noms de tables dans l'emplacement approprié dans la requête.

Vous pouvez le faire dans une procédure stockée avec PREPARE et EXECUTE, ou vous pouvez le faire dans le code de l'application.

Questions connexes