此查询运行,但它会生成表的名称,而不是从该表中实际选择。
SELECT T.*
FROM (SELECT tablename
FROM ListOfTables
WHERE id = 0) AS T
其中ListOfTables包含id=0, tablename='some_table'
,我想返回相同的结果集,就好像我直接写了一样:
SELECT * FROM some_table
在MySQL 5中是否有以本机方式执行此操作,或者我是否必须在应用程序中执行此操作?
答案 0 :(得分:5)
要在 MySQL 中执行此操作,您需要创建一个只能从prepared statement创建的user variable:
SELECT @tn := tablename FROM ListOfTables WHERE id = 0;
SET @qs = CONCAT('SELECT * FROM ', @tn);
PREPARE ps FROM @qs;
EXECUTE ps;
答案 1 :(得分: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)
答案 2 :(得分: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)