2013-10-22 21 views
7

Ich habe eine Tabelle tbl1, die eine Spalte hat tbl_names. Diese Spalte enthält den Namen einiger anderer Tabellen.
Jetzt möchte ich eine Abfrage in folgendem Format schreiben:
select * from (select tbl_names from tbl1)SQL-Abfrage dynamischer Tabellenname in FOR

Ich weiß, dass die Abfrage oben nicht funktioniert, aber wie kann ich das erreichen? Muss ich eine gespeicherte Prozedur oder etwas Ähnliches schreiben und jeden Wert der zweiten Abfrage wiederholen und die erste Abfrage ausführen?

Dank

+0

gespeicherte Prozedur Sie können für die schnelle Antwort –

+0

Dank Arun helfen. Aber sorry zu sagen, dass ich mit gespeicherten Prozeduren überhaupt nicht vertraut bin, also können Sie mir bitte dabei helfen :) –

Antwort

7

können Sie vorbereitete Anweisungen

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

PREPARE Syntax

Beifall verwenden.

-1

Fügen Sie einfach einen pseudonim zu der Unterabfrage:

select * from (select tbl_names from tbl1) a; 

Viel Glück)

+1

das scheint nicht in Mariadb zu funktionieren, haben Sie verifiziert, dass es in mysql funktioniert? Es scheint nicht so. – Milimetric

0

Sie benötigen einige dynamische SQL zu verwenden. Erstellen Sie eine SQL-Zeichenfolge mit der Abfrage, die Sie ausführen möchten, und rufen Sie dann exec(@sql)

Voll Beispiel:

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