首页 > 解决方案 > 我们可以在 Oracle 的视图中使用条件 UNION 吗?

问题描述

我创建了一个视图,它使用 UNION 从表中选择数据。我想知道我是否可以根据条件选择要联合的表。

如果 tableA.ColA = 1 然后从 tableA 中选择 ColA Union 从 tableB 中选择 ColB 否则从 tableA 中选择 ColA Union 从 tableC 中选择 ColC

标签: oracle

解决方案


听起来您可能想要这样的东西,其中有两个查询分支,由于相互不兼容的谓词,保证其中一个不会返回数据。

select b.*
  from (select ColA from tableA 
        Union 
        select ColB from tableB) b
 where exists( select 1
                 from tableA
                where colA = 1 )
union all
select c.*
  from (select ColA from tableA 
        Union 
        select ColC from tableC) c
 where not exists( select 1
                     from tableA
                    where colA = 1 )

不过,作为一个实际问题,我倾向于质疑任何涉及做这类事情的数据模型。如果您经常需要将来自不同表的数据合并在一起,这通常意味着您的数据模型不正确。例如,您可能需要一个附加实体,它是 A、B 和 C 的父实体。或者您可能希望将 A、B 和 C 组合成一个实体,其类型列指定行是否为 A,一个 B 或一个 C。


推荐阅读