insert into test values('0','1');
insert into test values('0','2');
insert into test values('1','11');
insert into test values('1','12');
insert into test values('2','21');
insert into test values('2','22');
insert into test values('11','111');
insert into test values('11','112');
insert into test values('12','121');
insert into test values('12','122');
insert into test values('21','211');
insert into test values('21','212');
insert into test values('22','221');
insert into test values('22','222');
commit;
select level||'层'
,lpad(' ',level*5)||id id
,CONNECT_BY_ISLEAF
from test
where CONNECT_BY_ISLEAF = 1
start with superid = '0'
connect by prior id=superid;
拿你提供的数据做的范例:
CREATE TABLE TBL_C(ID NUMBER, PARENTID NUMBER, LEV INTEGER);
INSERT INTO TBL_C
SELECT 1683,1,1 FROM DUAL UNION ALL
SELECT 1703,1683,2 FROM DUAL UNION ALL
SELECT 1707,1683,2 FROM DUAL UNION ALL
SELECT 1708,1683,2 FROM DUAL UNION ALL
SELECT 5759,1683,2 FROM DUAL UNION ALL
SELECT 7729,1683,2 FROM DUAL UNION ALL
SELECT 7733,1683,2 FROM DUAL UNION ALL
SELECT 7752,1683,2 FROM DUAL UNION ALL
SELECT 1704,1703,3 FROM DUAL UNION ALL
SELECT 1709,1708,3 FROM DUAL UNION ALL
SELECT 7753,7729,3 FROM DUAL UNION ALL
SELECT 7754,7752,3 FROM DUAL UNION ALL
SELECT 1705,1704,4 FROM DUAL UNION ALL
SELECT 5179,1709,4 FROM DUAL UNION ALL
SELECT 5229,1709,4 FROM DUAL UNION ALL
SELECT 1706,1705,5 FROM DUAL;
SELECT *
FROM TBL_C
START WITH LEV = 1
CONNECT BY PARENTID = PRIOR ID
ORDER BY LEV
所有叶子:
select *
from
(
SELECT nodeid,level FROM test_table
CONNECT BY PRIOR nodeid =
DECODE(nodeid, parentnodeid, NULL, parentnodeid)
START WITH nodeid = 3
ORDER BY level, nodeid;
) a
where not exists (select 1 from test_table b where b.parentnodeid = a.nodeid)