2

次を使用して、列'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';

しかし、外部スクリプトやストアドプロシージャを使用せずに、上記の2つの概念を組み合わせる方法がわかりません。

4

1 に答える 1

1

SQL クエリでは、テーブルと列を明示的にリストする必要があります。同じクエリで検索された別の列の結果からテーブルの名前を取得するクエリを作成することはできません。

解決策はすでに見つけたものです。情報スキーマに対して 1 つの SQL クエリを記述してテーブル名のリストを取得し、それらの結果を使用して 2 つ目の SQL クエリを作成し、テーブル名をクエリの適切な場所に補間します。

PREPAREこれは、とを使用してストアド プロシージャでEXECUTE行うか、アプリケーション コードで行うことができます。

于 2010-01-14T01:30:54.413 に答える