create table T_TREE ( FATHERID VARCHAR2(20), CHILDID VARCHAR2(20) );
insert into T_TREE (FATHERID, CHILDID) values ('2', '3');
insert into T_TREE (FATHERID, CHILDID) values ('10', '9');
insert into T_TREE (FATHERID, CHILDID) values ('1', '2');
insert into T_TREE (FATHERID, CHILDID) values ('3', '4');
insert into T_TREE (FATHERID, CHILDID) values ('8', '5');
insert into T_TREE (FATHERID, CHILDID) values ('9', '8');
commit;
--注意:下面所述内容仅在oracle10g中才支持。
---connect_by_root ,找出每个节点的根节点
SELECT MIN(root), childid
FROM (SELECT connect_by_root fatherid AS root, fatherid, childid
FROM t_tree
CONNECT BY fatherid = PRIOR childid) b
GROUP BY childid
ORDER BY childid;
--connect_By_isleaf,找到所有的叶子节点
SELECT DISTINCT childid
FROM (SELECT connect_by_isleaf leaf, childid, fatherid
FROM t_tree
CONNECT BY fatherid = PRIOR childid) b
WHERE b.leaf = 1;
--level 是connect by 字句中的一个伪列
SELECT 'dadaf', LEVEL FROM dual CONNECT BY LEVEL < 10;