使用case语句选择表

时间:2016-05-02 07:31:28

标签: oracle oracle11g

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;

这里我想在子句

之后使用case语句选择表名
case when v_id = 1 then
table_a
when v_id = 2 then 
table_b
else then
table_c
end as t

可能吗? 如果可能的话请帮我解决这个问题

3 个答案:

答案 0 :(得分:1)

您可以使用UNION ALL

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;

请注意,每个SELECT应具有相同数量的列和相应的类型。

另一种可能性是自定义SQL查询和动态SQL。

答案 1 :(得分:0)

我不确定这是否是您想要的,但您只需要复制table_a和table_b所在的语句:

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

这将创建表t,其中id和value为表中的列。如果你想要所有的表替换" a.id,a.value"用" *"。

注意:语法可能不正确:

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

答案 2 :(得分: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

并且必须返回一个包含2列ID AND VALUE的表,具体取决于v_id值。