当将过滤应用于Oracle层次化表时,我有一些问题。
基本上,我有一个使用EMP / MGR
结构的表,该表使用如下查询:
start with mgr is null
connect by nocycle prior emp = mgr;
在这个表中,我有一个额外的列,指定员工的DATE_OF_BIRTH
。
基于此场景,并保持此表/查询的相同层次性质,我如何应用筛选器来表示仅显示1965年至1980年之间的DATE_OF_BIRTH
的分层数据?
这只是开始子句之前的正常情况,还是需要成为START WITH / CONNECT By clause
的一部分?
where date_of_birth between 1965 and 1980
start with mgr is null
connect by nocycle prior emp = mgr;
发布于 2014-05-25 22:01:13
在这一点上,文献资料相当明确:
Oracle按以下方式处理分层查询:
如何使用此信息取决于您希望如何计算您的层次结构。如果您想使用所有经理和员工来创建树,然后过滤掉不想显示的人,那么您现在做的是正确的。
如果您想要确保没有日期范围的出生日期的人被排除在层次结构计算之外,那么您必须首先在子查询中进行筛选。
select ...
from ( select ... from ... where year_of_birth not between 1965 and 1980 )
start with mgr is null
connect by nocycle prior emp = mgr;
https://stackoverflow.com/questions/23856847
复制相似问题