2017-02-14 5 views
1

私は、同じフィールドタイプを持つ約300のテーブルを持っており、これらの300テーブルのリストとそのステータスを持つ別のテーブルがあります。ステータスに基づいて選択されたテーブルの結合を行う1つのクエリソリューションがありますか?別のテーブルから選択されたテーブルのmysqlユニオン

たとえば、300個のテーブルのそれぞれにユーザーレコード(ID、名、姓)があるとします。また、テーブルとステータスのレコードを持つ別のテーブル(テーブル名、ステータスコード(アクティブ/非アクティブ))。私はすべてのアクティブなテーブルからユーザーレコードの結合を作成したいと思います。

答えて

0

何とか可能です。しかし、列(id、first_name、last_name、table_name)を持つ単一のテーブルを使用してみませんか?それはパフォーマンスだろう適切なインデックス付き

select 
    m.id, m.first_name, m.last_name 
from 
    mytable m inner join tables t on 
    m.table_name = t.table_name 
where 
    t.status='Active' 

:クエリは、のような単純なものでしょう。あなたのテーブル構造を変更することなく、

ソリューションは、例えば、動的クエリを必要とするが、私はそれをお勧めしません:

select 
    group_concat(
    concat('select * from ', table_name) 
    separator ' union all ' 
) gc 
from 
    status 
where 
    status='Active' 
into @sql; 

prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 

(これは文字列のSQLにすべてのクエリ組合が作成され、それがしますテーブルを素早くエスケープする必要があります。また、group_concatのサイズ制限について気をつけてください)

+0

@IlyaI 2番目のソリューションを使用する必要があれば、SET SESSION group_concat_max_len = 1000000;でサイズ制限を変更できます。 – fthiella

+0

I既に最初のソリューションを使用していましたが、複数のテーブルを使用できるかどうかを確認したいと考えました。私は2番目の解決策を試します。ありがとう! –

関連する問題