2011-09-09 13 views
0

私は約200のテーブルを持つデータベースを持っており、特定の列(creation_date)を含むすべてのテーブルに対してクエリを実行する必要がありますが、すべてのテーブルにその列があるわけではありません。 SELECT * FROM * WHERE creation_date>=42は明らかに機能しませんが、それを実行する最善の方法は何でしょうか?(私)SQL:FROM句のワイルドカード?

+1

質問したいテーブルを明示的に含める必要があると思います... – Marco

+1

達成しようとしているのは正確ですか?なぜその列を含むすべてのテーブルからすべての行(条件を満たす)が必要なのですか?それは非常に奇妙なことのように聞こえる –

+0

可能重複:http://stackoverflow.com/questions/639531/mysql-search-in-all-fields-from-every-table-from-a-database – reggie

答えて

-1

あなたがそうのように照会したいテーブルを含めるように試みることができます。

SELECT * FROM table1 a, table2 b WHERE a.creation_date>=42 

あなたがからにワイルドカードを使用することはできません。上記のようにwhere句をどのテーブルに適用するかを指定することができます。列を持たないものは除外することができます。

例のクエリでは、table1(別名a)には列があり、table2(別名b)には含まれません。

+4

このステートメントは、結合条件が指定されていないため、これら2つのテーブルの間にデカルト積を作成するので、非常に危険です。適度なサイズのテーブルであっても、これは巨大な結果を生成します –

+0

あなたは絶対に正しいです...しかし答えは質問です。しかし、良いコメントです! –

+0

-1、あなたは組合が必要で、クロスジョインは必要ありません。 '' table1 union select f1 from table2 union select .... 'を選択してください。 – Johan

0

メタデータから動的SQLクエリを作成できます。私はこのようにアプローチします:

  1. は、テーブル、カラムcreation_date
  2. を持っている場合、それは、このテーブルにクエリを追加しない場合を参照してください
  3. 、各テーブルのテーブル
  4. のリストを取得します。動的なクエリ
  5. 連合ます。また、複数のテーブル上のビューを作成することができるかもしれない一緒に結果

。次に、ビューを照会するだけです。

のMySQLから直接コピー
2
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, TABLE_NAME, 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'tbl_name' 
    [AND table_schema = 'db_name'] 
    [AND column_name ='creation_date'] 

- あなたはこれらのシステムテーブルを通してループする必要があり、リストは、それらが含まれています...

、あなたはあなたのSQLステートメントを構築し、それらが動作することを確認することができます...

+0

ステートメントをアセンブルするための外部ロジックが必要で、純粋なSQLで実行できません。それが私が避けようとしていたものです。 – Creshal

+0

純粋なSQL文を実行できます。呼び出されるシステムテーブルは、他のテーブルと同様です。私は元をやるか?あなたのために ? – Mike