我可以使用以下方法获取包含列'hostname'的所有表:
select select table_name from information_schema.columns
where column_name='hostname';
如果我知道所有表格的名称,我可以使用像:
这样的联盟SELECT * FROM ((SELECT hostname FROM table1)
UNION (SELECT hostname FROM table2)
...
UNION (SELECT hostname FROM tableN)) AS hosttable where hostname = 'hostA';
但我不知道如何在不使用外部脚本或存储过程的情况下组合上述两个概念。
答案 0 :(得分:1)
SQL查询必须明确列出表和列。您不能编写从同一查询中搜索的另一列的结果中获取表名的查询。
解决方案是您已经找到的解决方案:针对信息模式编写一个SQL查询以获取表名列表,然后使用这些结果构建第二个SQL查询,将表名插入到适当的位置查询。
您可以使用PREPARE
和EXECUTE
在存储过程中执行此操作,也可以在应用程序代码中执行此操作。