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
可能吗? 如果可能的话请帮我解决这个问题
答案 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"用" *"。
注意:语法可能不正确:
答案 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值。