繁体   English   中英

相当于“SELECT * FROM(SELECT table_name FROM ...)”的东西?

[英]Something equivalent to “SELECT * FROM (SELECT table_name FROM…)”?

此查询运行,但它会生成表的名称,而不是从该表中实际选择。

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

其中ListOfTables包含id=0, tablename='some_table' ,我想返回相同的结果集,就好像我直接写了这个:

SELECT * FROM some_table

在MySQL 5中是否有以本机方式执行此操作,或者我是否必须在应用程序中执行此操作?

要在MySQL中执行此操作,您需要创建一个只能从用户变量创建的预准备语句

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

SET @qs = CONCAT('SELECT * FROM ', @tn);
PREPARE ps FROM @qs;
EXECUTE ps;

您需要使用动态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)

与@ 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM