繁体   English   中英

筛选Oracle 11g层次表

[英]Filtering Oracle 11g Hierarchical Tables

将过滤应用于Oracle分层表时,我在理解上有些麻烦。

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

start with mgr is null
connect by nocycle prior emp = mgr;

在此表中,我还有一个附加列,用于指定员工的DATE_OF_BIRTH

基于这种情况并保持此表/查询的相同层次结构性质,我将如何应用过滤器以仅显示DATE_OF_BIRTH在1965年至1980年之间的层次结构数据?

这只是START WITH子句之前的正常WHERE条件,还是需要作为START WITH / CONNECT By clause

where date_of_birth between 1965 and 1980 
start with mgr is null
connect by nocycle prior emp = mgr;

关于这一点,文档非常明确:

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

  • 无论是在FROM子句中指定还是使用WHERE子句谓词指定联接,如果存在联接,则将首先对其进行评估。

  • 将评估CONNECT BY条件。

  • 将评估所有其余的WHERE子句谓词。

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

如果要确保将那些出生日期不在该日期范围内的人排除在层次结构计算之外,则必须首先在子查询中进行过滤。

 select ...
   from ( select ... from ... where year_of_birth not between 1965 and 1980 )
  start with mgr is null
connect by nocycle prior emp = mgr;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM