sql—使用中间Map表从表中选择数据

gg0vcinb  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(346)

我有一个Map表 VW_MAPPING . VW_MAPPING 有如下列和数据:
Metric Table A VW_A B VW_B C VW_C D VW_D E VW_E 现在我要执行条件选择。就像

when Metric = A then SELECT * FROM VW_A;

when Metric = B then SELECT * FROM VW_B;

i) 所有表的列数都相同。
ii)基础表没有公制列
基本上,我将从输入表单中获取度量值。所以我想显示相应的数据。如果 A 然后我将显示 VW_A . 对于哪个响应,我们必须使用哪个表 VW_MAPPING .
我想要的是这样的:

SELECT * FROM variable_table_name;

variable_table_name = SELECT TABLE FROM VW_MAPPING WHERE METRIC = form input

这是伪代码
我不能使用pl/sql。

0vvn1miw

0vvn1miw1#

虽然可能不是最有效的方法,但我倾向于:

with v as (
      select 'A' as metric, a.* from vw_a a union all
      select 'B', b.* from vw_b b union all
      select 'C', c.* from vw_c c union all
      . . . 
     )
select v.*
from v
where metric = :metric;

也就是说,Map表实际上并不有用。您应该有一个包含所有度量的表和一个标识度量的附加列,而不是一个Map表。也可以使用视图而不是表来完成此操作。

ars1skjm

ars1skjm2#

这是你想要的吗?

SELECT * FROM VW_A where Metric  in 
(selct Metric from VW_MAPPING);

SELECT * FROM VW_B where Metric  in 
(selct Metric from VW_MAPPING);
xnifntxz

xnifntxz3#

有几种方法可以做到这一点。
到目前为止,最好的方法是在用户界面层处理这个问题——输入表单后面的代码应该决定执行哪个查询。这有很多好处:代码更简单,可能更快,而且您的数据库执行“存储和修改数据”任务,而不是“对用户选择作出React”任务。
如果你真的做不到,你可以用工会

select * 
from VW_A
where metric = 'A'
union
select * 
from VW_A
where metric = 'B'
...

这将决策嵌入到查询中,而不是查看Map表。
如果您真的想使用Map表,则需要使用动态sql,但您说不能使用pl/sql。
我不知道还有其他选择。

相关问题