最高级别记录之前的Oracle分层查询记录

时间:2013-05-03 00:49:02

标签: sql plsql oracle11g

我有以下Oracle SQL查询:

select   id_emp_no,
         LEVEL,
         CONNECT_BY_ISLEAF isleaf
from  my_table  
start with id_emp_no = :x
connect by prior my_mgr = id_emp_no 
ORDER BY level

这会产生以下输出:

ID_EMP_NO   LEVEL   ISLEAF
11          1       0
22          2       0
33          3       0
44          4       0
55          5       0   <<====
66          6       1

根据上面的输出,我特别追溯的实际结果ID_EMP_NO是ID_EMP_NO = 55,即最大级别之前的记录和ISLEAF之前的记录等于1。

所以我只想返回ID_EMP_NO = 55的记录。

1 个答案:

答案 0 :(得分:4)

请记住,prior只不过是一个操作符,从层次结构的上层指定此列的值,这意味着您可以(几乎)在查询中的任何位置使用它:

SQL Fiddle

select prior id_emp_no 
  from my_table  
 where CONNECT_BY_ISLEAF = 1 
 start with id_emp_no = 11
connect by prior my_mgr = id_emp_no

<强> Results

| PRIORID_EMP_NO |
------------------
|             55 |