Reputation: 825
I am looking for solution how to select with use of sys_connect_by_path only full hierarchy 'branches'. I found such example on the Internet, but as result is presented it lacks second query which interests me. Example below. Does anyone know how can i achieve second form of output - full hierarchy skipping shorter ones ?
SQL>
SQL> column full_path format a40
SQL>
SQL> select ename
2 , connect_by_root ename as Designer
3 , sys_connect_by_path(ename,' > ') as full_path
4 from emp
5 start with job = 'Designer'
6 connect by prior empno = mgr;
ENAME DESIGNER FULL_PATH
-------- -------- ----------------------------------------
Jane Jane > Jane
Smart Jane > Jane > Smart
Ana Jane > Jane > Smart > Ana
Fake Jane > Jane > Fake
Tom Jane > Jane > Fake > Tom
Black Black > Black
Jack Black > Black > Jack
Wil Black > Black > Wil
Mary Black > Black > Mary
Take Black > Black > Take
Jane Black > Black > Jane
Chris Chris > Chris
Mike Chris > Chris > Mike
Peter Peter > Peter
Jane Peter > Peter > Jane
Smart Peter > Peter > Jane > Smart
Ana Peter > Peter > Jane > Smart > Ana
Fake Peter > Peter > Jane > Fake
Tom Peter > Peter > Jane > Fake > Tom
ENAME DESIGNER FULL_PATH
-------- -------- ----------------------------------------
Black Peter > Peter > Black
Jack Peter > Peter > Black > Jack
Wil Peter > Peter > Black > Wil
Mary Peter > Peter > Black > Mary
Take Peter > Peter > Black > Take
Jane Peter > Peter > Black > Jane
Chris Peter > Peter > Chris
Mike Peter > Peter > Chris > Mike
Upvotes: 2
Views: 7314
Reputation: 168051
Use the CONNECT_BY_ISLEAF
pseudocolumn to filter to only those rows that are at the leaf of the hierarchy tree:
select ename
, connect_by_root ename as Designer
, sys_connect_by_path(ename,' > ') as full_path
from emp
WHERE CONNECT_BY_ISLEAF = 1
start with job = 'Designer'
connect by prior empno = mgr;
Upvotes: 3