FOR

2013-10-22 6 views
7
のSQLクエリの動的テーブル名

テーブルtbl1は、カラムがのtbl_namesです。この列には、他のテーブルの名前が含まれています。
は今、私は次の形式でクエリを書きたい:
select * from (select tbl_names from tbl1)FOR

私は上記のクエリが動作しないことを知っているが、私はこれを達成することができますか?ストアドプロシージャなどを記述し、2番目のクエリの各値にループして最初のクエリを実行する必要がありますか?あなたが準備された文

SET @a = (select tbl_names from tbl1); 
SET @x := CONCAT('SELECT * FROM ', @a); 
Prepare stmt FROM @x; 
Execute stmt; 
DEALLOCATE PREPARE stmt; 

PREPARE Syntax

乾杯を使用することができます

おかげ

+0

ストアドプロシージャは、迅速な応答をあなたに –

+0

おかげアルンを助けることができる:あなたが実行してからexec(@sql)

全例を呼び出したいクエリとSQL文字列を構築します。しかし、私はストアドプロシージャに慣れていないと申し訳ありませんので、これで私を助けてください:) –

答えて

7

-1

ただ、サブクエリにpseudonimを追加します。

select * from (select tbl_names from tbl1) a; 

幸運)

+1

これはmariadbで動作するようには見えませんが、mysqlで動作することを確認しましたか?それはそうではないようです。 – Milimetric

0

あなたは、いくつかの動的SQLを使用する必要があります。

declare cur cursor for 
select tbl_names from tbl1 

declare @sql varchar(100), @tbl varchar(100) 

open cur 

fetch cur into @tbl 

while @@FETCH_STATUS = 0 begin 
    set @sql = 'select * from ' + @tbl 
    exec(@sql) 
    fetch cur into @tbl 
end 

close cur 
deallocate cur