2013-10-22 30 views
7

Tôi có một bảng tbl1 có cột tbl_names. Cột này chứa tên của một số bảng khác.
Bây giờ tôi muốn viết một truy vấn trong các định dạng sau:
select * from (select tbl_names from tbl1)Tên bảng động truy vấn SQL trong FOR

Tôi biết rằng các truy vấn trên sẽ không làm việc nhưng làm thế nào tôi có thể đạt được điều này? Tôi có cần phải viết một thủ tục lưu trữ hoặc một cái gì đó như thế và lặp trên mỗi giá trị của truy vấn thứ hai và thực hiện truy vấn đầu tiên?

Cảm ơn

+0

thủ tục lưu trữ có thể giúp bạn –

+0

Cảm ơn Arun trả lời nhanh chóng. Nhưng xin lỗi để nói rằng tôi không quen thuộc với các thủ tục lưu trữ ở tất cả vì vậy bạn có thể xin vui lòng giúp tôi với điều này :) –

Trả lời

7

Bạn có thể sử dụng chuẩn bị phát biểu

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

PREPARE Syntax

Cheers.

-1

Chỉ cần thêm một pseudonim để subquery:

select * from (select tbl_names from tbl1) a; 

Chúc may mắn)

+1

điều này dường như không làm việc trong mariadb, bạn đã xác minh rằng nó hoạt động trong mysql? Nó không có vẻ như nó sẽ. – Milimetric

0

Bạn sẽ cần phải sử dụng một số lệnh SQL động. Xây dựng một chuỗi SQL với các truy vấn mà bạn muốn thực hiện và sau đó gọi exec(@sql)

Full dụ:

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 
Các vấn đề liên quan