2013-10-22 24 views
7

Ho una tabella tbl1 che ha una colonna tbl_names. Questa colonna contiene il nome di alcune altre tabelle.
Ora voglio scrivere una query nel seguente formato:
select * from (select tbl_names from tbl1)Nome tabella dinamica query SQL in FOR

So che la query di cui sopra non funzionerà ma come posso raggiungere questo obiettivo? Devo scrivere una stored procedure o qualcosa del genere e fare un ciclo su ciascun valore della seconda query ed eseguire la prima query?

Grazie

+0

stored procedure può aiutare a –

+0

Grazie Arun per la risposta rapida. Ma mi spiace dirti che non ho alcuna familiarità con le stored procedure, quindi puoi aiutarmi con questo :) –

risposta

7

È possibile utilizzare le istruzioni preparate

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

PREPARE Syntax

Cin cin.

-1

Basta aggiungere un pseudonim alla sottoquery:

select * from (select tbl_names from tbl1) a; 

Buona fortuna)

+1

questo non sembra funzionare in mariadb, hai verificato che funzioni in mysql? Non sembra come sarebbe. – Milimetric

0

Avrai bisogno di utilizzare alcuni SQL dinamico. Costruire una stringa SQL con la query che si desidera eseguire e quindi chiamare exec(@sql)

esempio completa:

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 
Problemi correlati