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 回答