7

tbl_namesを持つテーブルtbl1があります。この列には、他のいくつかのテーブルの名前が含まれています。 ここで、次の形式でクエリを記述します。

select * from (select tbl_names from tbl1)

上記のクエリが機能しないことはわかっていますが、どうすればこれを達成できますか? ストアド プロシージャなどを作成し、2 番目のクエリの各値をループして最初のクエリを実行する必要がありますか?

ありがとう

4

3 に答える 3

7

準備済みステートメントを使用できます

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

PREPARE 構文

乾杯。

于 2013-10-22T06:34:35.313 に答える
0

動的 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
于 2013-10-22T08:18:12.007 に答える
-1

サブクエリに仮名を追加するだけです。

select * from (select tbl_names from tbl1) a;

幸運を )

于 2013-10-22T07:29:05.523 に答える