在FOR语句中使用动态表名的SQL查询

7
我有一张名为 tbl1 的表,其中有一列名为 tbl_names。这一列包含其他表的名称。
现在我想按以下格式编写查询:
select * from (select tbl_names from tbl1) 我知道上面的查询不会起作用,但是我该如何实现呢?我需要编写存储过程或类似的东西,并循环执行第二个查询中的每个值来执行第一个查询吗?
谢谢

存储过程可以帮助您。 - Arun Killu
谢谢Arun的快速回复。但很抱歉我对存储过程一点都不熟悉,所以你能帮我解决这个问题吗 :) - Sibtain Norain
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 语法

干杯。


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

-1

只需在子查询中添加一个别名:

select * from (select tbl_names from tbl1) a;

祝你好运 )


1
这在Mariadb中好像不起作用,你验证过它在Mysql中是否能够运行吗?看起来好像不行。 - Milimetric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接