2016-05-02 7 views
1
if v_id = 1 then 
select a.id, a.value from table_a a; 
elsif v_id = 2 then 
select b.id, b.value from table_b b; 
else 
select c.id, c.value from table_c c; 
end if; 

Hier will ich Tabellennamen mit Case-Anweisung wählen nach aus KlauselWählen Sie Tabelle mit Case-Anweisung

case when v_id = 1 then 
table_a 
when v_id = 2 then 
table_b 
else then 
table_c 
end as t 

Ist es möglich ?? wenn möglich dann

Antwort

1

Sie UNION ALL verwenden könnte mir helfen, mit dieser Abfrage bitte:

select a.id, a.value 
from table_a a 
where v_id = 1 
union all 
select b.id, b.value 
from table_b b 
where v_id = 2 
union all 
select c.id, c.value 
from table_c c 
where v_id = 3; 

Beachten Sie, dass jeder SELECT die die gleiche Anzahl von Spalten und entsprechenden Typen haben sollte.


Eine andere Möglichkeit ist benutzerdefinierte SQL-Abfrage und dynamisches SQL.

+0

Ich kenne bereits mit diesem Problem über dynamische SQL. Aber hier möchte ich case after from-Klausel verwenden, um die Tabelle auszuwählen. Wenn möglich, dann sag mir den Weg oder unterstützt Orakel das Format, das ich geschrieben habe? –

+1

@ B.Khan Das von Ihnen vorgeschlagene Format, z. B. 'FROM CASE', ist keine gültige Syntax. – lad2025

0

Ich bin nicht sicher, ob dies ist, was Sie wollen, aber Sie müssen nur die Aussagen kopieren, wo TABLE_A und Table_B sind:

case when v_id = 1 then 
select a.id, a.value from table_a a; 
when v_id = 2 then 
select b.id, b.value from table_b b; 
else 
select c.id, c.value from table_c c; 
end as t 

Dies wird Tabelle t mit der ID und den Wert als Spalten aus den Tabellen erstellen . Wenn Sie alle Tabellen ersetzen möchten, ersetzen Sie "a.id, a.value" durch "*".

Hinweis: Die Syntax möglicherweise falsch:

Referenz: https://dev.mysql.com/doc/refman/5.7/en/case.html

0
SELECT CASE WHEN v_id = 1 THEN a.id 
      WHEN v_id = 2 then b.id 
      ELSE c.id END AS ID, 
     CASE WHEN v_id = 1 THEN a.value 
      WHEN v_id = 2 then b.value 
      ELSE c.value END AS VALUE 
FROM a,b,c 

Und es muss eine Tabelle mit 2 Spalten-ID UND WERT sein zurück, je den v_id Wert.

Verwandte Themen