2013-10-22 89 views
7

我有一個表tbl1其中有一列tbl_names。此列包含一些其他表的名稱。
現在我想寫按以下格式的查詢:
select * from (select tbl_names from tbl1)SQL中的查詢動態表名FOR

我知道,上面的查詢不會工作,但我怎麼能做到這一點?我是否需要編寫一個存儲過程或類似的東西,然後在第二個查詢的每個值上循環並執行第一個查詢?

感謝

+0

存儲過程可以幫助你 –

+0

感謝阿倫的快速回復。但遺憾的是,我不熟悉存儲過程,所以你可以請幫我這:) –

回答

7

您可以使用準備好的語句

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

PREPARE Syntax

乾杯。

-1

只是pseudonim添加到子查詢:

select * from (select tbl_names from tbl1) a; 

祝你好運)

+1

這似乎並沒有在mariadb工作,你有沒有證實它在mysql中工作?看起來好像不會。 – Milimetric

0

你需要使用一些動態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