oracle - 我们可以在 Oracle 的视图中使用条件 UNION 吗?
问题描述
我创建了一个视图,它使用 UNION 从表中选择数据。我想知道我是否可以根据条件选择要联合的表。
如果 tableA.ColA = 1 然后从 tableA 中选择 ColA Union 从 tableB 中选择 ColB 否则从 tableA 中选择 ColA Union 从 tableC 中选择 ColC
解决方案
听起来您可能想要这样的东西,其中有两个查询分支,由于相互不兼容的谓词,保证其中一个不会返回数据。
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。
推荐阅读
- matplotlib - contourf 在有限数据上绘制空白。过去的答案不正确
- android - 使用 FCM 在 Android 应用中接收来自多个发件人(Firebase 项目)的消息
- python - Keras:推文分类
- python - python中包含数据数组和函数的积分的曲线拟合
- html - 溢出-y 在身体上的 div 上无法正常工作
- ignite - 在 ignite 集群中一次运行一次任务
- excel - 为什么 Excel 365 vba 无法保存我的 pdf 文件?
- angular - 仅在 IE 中触发 Angular 输入事件
- java - 反序列化序列化的不对称 [JsonInclude] 行为
- java - 两个 Roll Dicer Java 面向对象的方式