4

このクエリは実行されますが、実際にそのテーブルから選択するのではなく、結果としてテーブルの名前が生成されます。

SELECT T.* 
  FROM (SELECT tablename 
          FROM ListOfTables 
         WHERE id = 0) AS T

ListOfTablesにが含まれid=0, tablename='some_table'ている場合、これを直接記述した場合と同じ結果セットを返したいと思います。

SELECT * FROM some_table

MySQL 5でこれを行うネイティブな方法はありますか、それともアプリケーションで行う必要がありますか?

4

3 に答える 3

5

MySQLでこれを行うには、ユーザー変数からのみ作成できるプリペアドステートメントを作成する必要があります。

SELECT @tn := tablename FROM ListOfTables WHERE id = 0;

SET @qs = CONCAT('SELECT * FROM ', @tn);
PREPARE ps FROM @qs;
EXECUTE ps;
于 2012-02-26T16:26:42.223 に答える
3

この結果を得るには、動的 SQL を使用する必要があります (以下のコードは SQL Server を想定しています。他の RDBMS について話すことはできません)。

declare @tableName varchar(100)
declare @query varchar(500)

select @tableName = tablename
from ListOfTables
where id = 0

select @query = 'select * from ' + @tableName

exec (@query)
于 2012-02-26T16:12:57.383 に答える
0

構文エラーを避けるためにテーブルの名前も引用することを除いて、@Sharkの回答とほぼ同じです。

-- Using variables just for better readability.
DECLARE @Name NVARCHAR(4000)
DECLARE @Query NVARCHAR(4000)

-- Get the relevant data
SET @Name = QUOTENAME(SELECT tablename FROM ListOfTables WHERE id=0)
-- Build query 
SET @Query = 'SELECT * FROM ' + @Schema + '.' + @Name + ''
-- execute it.
EXEC(@Query)
于 2012-02-26T16:20:45.337 に答える