FOR中的SQL查询动态表名

Posted

技术标签:

【中文标题】FOR中的SQL查询动态表名【英文标题】:SQL query dynamic table name in FOR 【发布时间】:2013-10-22 06:25:40 【问题描述】:

我有一个表 tbl1,其中有一列 tbl_names。此列包含其他一些表的名称。 现在我想写一个如下格式的查询:select * from (select tbl_names from tbl1)

我知道上面的查询不起作用,但我该如何实现呢?我是否需要编写一个存储过程或类似的东西并循环第二个查询的每个值并执行第一个查询?

谢谢

【问题讨论】:

存储过程可以帮你 感谢 Arun 的快速回复。但是很抱歉,我根本不熟悉存储过程,所以请你帮我解决这个问题:) 【参考方案1】:

你可以使用准备好的语句

SET @a = (select tbl_names from tbl1);
SET @x := CONCAT('SELECT * FROM ', @a);
Prepare stmt FROM @x;
Execute stmt;
DEALLOCATE PREPARE stmt;

PREPARE Syntax

干杯。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

select * from (select tbl_names from tbl1) a;

祝你好运)

【讨论】:

这似乎在mariadb中不起作用,您是否验证它在mysql中起作用?好像不会。

以上是关于FOR中的SQL查询动态表名的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 或 PL/SQL 对多个表中的列和表名进行动态查询

mysql中查询语句的表名,是不是可以动态选择表名像这样

oracle 动态传入表名,怎么做? 高手指点

mybatis动态调用表名和字段名

使用表名中的 % 对多个表动态迭代相同的查询?

使用 from 子句中的子查询动态选择表名