我们可以在Oracle视图中使用条件UNION吗?

时间:2019-04-02 18:31:09

标签: oracle

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

如果tableA.ColA = 1,则从tableA中选择ColA,并从tableB中选择ColB。 其他 从表A中选择ColA,从表C中选择ColC

1 个答案:

答案 0 :(得分:1)

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

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。