2

我可以使用以下方法获取包含“主机名”列的所有表:

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';

但是我不知道如何在不使用外部脚本或存储过程的情况下将上述两个概念结合起来。

4

1 回答 1

1

SQL 查询必须明确列出表和列。您不能编写从在同一查询中搜索的另一列的结果中获取表名称的查询。

解决方案是您已经找到的解决方案:针对信息模式编写一个 SQL 查询以获取表名列表,然后使用这些结果构建第二个 SQL 查询,将表名插入到查询中的适当位置。

PREPARE您可以使用and在存储过程中执行此EXECUTE操作,也可以在应用程序代码中执行此操作。

于 2010-01-14T01:30:54.413 回答