首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >过滤Oracle11g分层表

过滤Oracle11g分层表
EN

Stack Overflow用户
提问于 2014-05-25 15:22:26
回答 1查看 85关注 0票数 0

当将过滤应用于Oracle层次化表时,我有一些问题。

基本上,我有一个使用EMP / MGR结构的表,该表使用如下查询:

代码语言:javascript
代码运行次数:0
运行
复制
start with mgr is null
connect by nocycle prior emp = mgr;

在这个表中,我有一个额外的列,指定员工的DATE_OF_BIRTH

基于此场景,并保持此表/查询的相同层次性质,我如何应用筛选器来表示仅显示1965年至1980年之间的DATE_OF_BIRTH的分层数据?

这只是开始子句之前的正常情况,还是需要成为START WITH / CONNECT By clause的一部分?

代码语言:javascript
代码运行次数:0
运行
复制
where date_of_birth between 1965 and 1980 
start with mgr is null
connect by nocycle prior emp = mgr;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-25 22:01:13

在这一点上,文献资料相当明确:

Oracle按以下方式处理分层查询:

  • 如果存在,则首先计算联接,无论该连接是在FROM子句中指定的还是在WHERE子句谓词中指定的。
  • 根据条件对连接进行评估。
  • 计算剩余的WHERE子句谓词。

如何使用此信息取决于您希望如何计算您的层次结构。如果您想使用所有经理和员工来创建树,然后过滤掉不想显示的人,那么您现在做的是正确的。

如果您想要确保没有日期范围的出生日期的人被排除在层次结构计算之外,那么您必须首先在子查询中进行筛选。

代码语言:javascript
代码运行次数:0
运行
复制
 select ...
   from ( select ... from ... where year_of_birth not between 1965 and 1980 )
  start with mgr is null
connect by nocycle prior emp = mgr;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23856847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档