我有一個表tbl1其中有一列tbl_names。此列包含一些其他表的名稱。
現在我想寫按以下格式的查詢:
select * from (select tbl_names from tbl1)
SQL中的查詢動態表名FOR
我知道,上面的查詢不會工作,但我怎麼能做到這一點?我是否需要編寫一個存儲過程或類似的東西,然後在第二個查詢的每個值上循環並執行第一個查詢?
感謝
我有一個表tbl1其中有一列tbl_names。此列包含一些其他表的名稱。
現在我想寫按以下格式的查詢:
select * from (select tbl_names from tbl1)
SQL中的查詢動態表名FOR
我知道,上面的查詢不會工作,但我怎麼能做到這一點?我是否需要編寫一個存儲過程或類似的東西,然後在第二個查詢的每個值上循環並執行第一個查詢?
感謝
您可以使用準備好的語句
SET @a = (select tbl_names from tbl1);
SET @x := CONCAT('SELECT * FROM ', @a);
Prepare stmt FROM @x;
Execute stmt;
DEALLOCATE PREPARE stmt;
乾杯。
只是pseudonim添加到子查詢:
select * from (select tbl_names from tbl1) a;
祝你好運)
這似乎並沒有在mariadb工作,你有沒有證實它在mysql中工作?看起來好像不會。 – Milimetric
你需要使用一些動態SQL。構建了要執行,然後調用exec(@sql)
完整的示例查詢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
存儲過程可以幫助你 –
感謝阿倫的快速回復。但遺憾的是,我不熟悉存儲過程,所以你可以請幫我這:) –