2010-01-14 61 views
2

我可以得到所有的表包含列「主機名」使用:我怎麼能與列主機包含主機數據庫返回所有表的列表= hostA的

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

但我不知道怎麼以上兩個概念,而無需使用外部腳本或存儲過程結合起來。

回答

1

SQL查詢必須明確列出表和列。您不能編寫一個查詢,該查詢從同一個查詢中搜索的另一列的結果中獲取表的名稱。

該解決方案是您已經找到的解決方案:針對信息模式編寫一個SQL查詢以獲取表名列表,然後使用這些結果構建第二個SQL查詢,將表名插入適當的位置在查詢中。

您可以在存儲過程中使用PREPAREEXECUTE執行此操作,也可以在應用程序代碼中執行此操作。

相關問題