列tbl_namesを持つテーブルtbl1があります。この列には、他のいくつかのテーブルの名前が含まれています。
ここで、次の形式でクエリを記述します。
select * from (select tbl_names from tbl1)
上記のクエリが機能しないことはわかっていますが、どうすればこれを達成できますか? ストアド プロシージャなどを作成し、2 番目のクエリの各値をループして最初のクエリを実行する必要がありますか?
ありがとう
列tbl_namesを持つテーブルtbl1があります。この列には、他のいくつかのテーブルの名前が含まれています。
ここで、次の形式でクエリを記述します。
select * from (select tbl_names from tbl1)
上記のクエリが機能しないことはわかっていますが、どうすればこれを達成できますか? ストアド プロシージャなどを作成し、2 番目のクエリの各値をループして最初のクエリを実行する必要がありますか?
ありがとう
準備済みステートメントを使用できます
SET @a = (select tbl_names from tbl1);
SET @x := CONCAT('SELECT * FROM ', @a);
Prepare stmt FROM @x;
Execute stmt;
DEALLOCATE PREPARE stmt;
乾杯。
動的 SQL を使用する必要があります。実行するクエリを使用して SQL 文字列を作成し、呼び出すexec(@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
サブクエリに仮名を追加するだけです。
select * from (select tbl_names from tbl1) a;
幸運を )