树形查询新特性CONNECT_BY_ISLEAF的9i实现方式
2009-12-25 12:03
495 查看
在10g中Oracle提供了新的伪列:CONNECT_BY_ISLEAF,通过这个伪列,可以判断当前的记录是否是树的叶节点。
这里描述一下在9i中如何实现相应的功能.
首先构造一个例子:
select * from t_tree;
看看CONNECT_BY_ISLEAF的功能:
CONNECT_BY_ISLEAF可以判断当前记录是否是树的叶节点。而这个功能在9i中没有简单的方法来实现,只能通过分析函数来进行判断:
利用分析函数可以相对简单的在9i实现CONNECT_BY_ISLEAF伪列的功能。
这里描述一下在9i中如何实现相应的功能.
首先构造一个例子:
CREATE TABLE T_TREE (ID NUMBER PRIMARY KEY, FATHER_ID NUMBER, NAME VARCHAR2(30)); INSERT INTO T_TREE VALUES (1, 0, 'A'); INSERT INTO T_TREE VALUES (2, 1, 'BC'); INSERT INTO T_TREE VALUES (3, 1, 'DE'); INSERT INTO T_TREE VALUES (4, 1, 'FG'); INSERT INTO T_TREE VALUES (5, 2, 'HIJ'); INSERT INTO T_TREE VALUES (6, 4, 'KLM'); INSERT INTO T_TREE VALUES (7, 6, 'NOPQ'); COMMIT;
select * from t_tree;
ID | FATHER_ID | NAME | |
1 | 1 | 0 | A |
2 | 2 | 1 | BC |
3 | 3 | 1 | DE |
4 | 4 | 1 | FG |
5 | 5 | 2 | HIJ |
6 | 6 | 4 | KLM |
7 | 7 | 6 | NOPQ |
看看CONNECT_BY_ISLEAF的功能:
SELECT ID, FATHER_ID, NAME, CONNECT_BY_ISLEAF LEAF FROM T_TREE START WITH FATHER_ID = 0 CONNECT BY PRIOR ID = FATHER_ID;
ID | FATHER_ID | NAME | LEAF | |
1 | 1 | 0 | A | 0 |
2 | 2 | 1 | BC | 0 |
3 | 5 | 2 | HIJ | 1 |
4 | 3 | 1 | DE | 1 |
5 | 4 | 1 | FG | 0 |
6 | 6 | 4 | KLM | 0 |
7 | 7 | 6 | NOPQ | 1 |
SELECT ID, FATHER_ID, NAME, CONNECT_BY_ISLEAF LEAF FROM T_TREE START WITH ID = 7 ONNECT BY PRIOR FATHER_ID = ID;
ID | FATHER_ID | NAME | LEAF | |
1 | 7 | 6 | NOPQ | 0 |
2 | 6 | 4 | KLM | 0 |
3 | 4 | 1 | FG | 0 |
4 | 1 | 0 | A | 1 |
CONNECT_BY_ISLEAF可以判断当前记录是否是树的叶节点。而这个功能在9i中没有简单的方法来实现,只能通过分析函数来进行判断:
SELECT ID, FATHER_ID, NAME, CASE WHEN LEAD(LEVELS) OVER(ORDER BY RN) > LEVELS THEN 0 ELSE 1 END LEAF FROM ( SELECT ROWNUM RN, ID, FATHER_ID, NAME, LEVEL LEVELS FROM T_TREE START WITH FATHER_ID = 0 CONNECT BY PRIOR ID = FATHER_ID );
ID | FATHER_ID | NAME | LEAF | |
1 | 1 | 0 | A | 0 |
2 | 2 | 1 | BC | 0 |
3 | 5 | 2 | HIJ | 1 |
4 | 3 | 1 | DE | 1 |
5 | 4 | 1 | FG | 0 |
6 | 6 | 4 | KLM | 0 |
7 | 7 | 6 | NOPQ | 1 |
SELECT ID, FATHER_ID, NAME, CASE WHEN LEAD(LEVELS) OVER(ORDER BY RN) > LEVELS THEN 0 ELSE 1 END LEAF FROM ( SELECT ROWNUM RN, ID, FATHER_ID, NAME, LEVEL LEVELS FROM T_TREE START WITH ID = 7 CONNECT BY PRIOR FATHER_ID = ID );
ID | FATHER_ID | NAME | LEAF | |
1 | 7 | 6 | NOPQ | 0 |
2 | 6 | 4 | KLM | 0 |
3 | 4 | 1 | FG | 0 |
4 | 1 | 0 | A | 1 |
相关文章推荐
- 10g树形查询新特性CONNECT_BY_ISLEAF的9i实现方式
- 10g树形查询特性CONNECT_BY_ISCYCLE的9i实现方式
- 使用分析函数实现Oracle 10G提供的CONNECT_BY_ISLEAF和CONNECT_BY_ROOT的功能(转载)
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- MySQL实现类似于connect_by_isleaf的功能MySQL方法或存储过程
- mysql数据库实现类似oracle connect by prior的查询
- oracle中 connect by prior 递归算法,connect_by_root,sys_connect_by_path,connect_by_isleaf,CONNECT_BY_ISCYC
- oracle中 connect by prior 递归算法,connect_by_root,sys_connect_by_path,connect_by_isleaf,CONNECT_BY_ISCYC
- 树形数据结构查询 CONNECT BY PRIOR
- oracle树形查询 start with connect by
- oracle树形查询 start with connect by
- connect_by_root and connect_by_isleaf
- Oracle实现树查询:select ... start with ... connect by prior
- Oracle Connect By用法 树形结构查询
- oracle中 connect by prior 递归算法,connect_by_root,sys_connect_by_path,connect_by_isleaf,CONNECT_BY_ISCYC
- oracle 递归查询 CONNECT BY、START WITH、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH
- leve,connect_by_isleaf,connect_by_iscycle伪列
- oracle树形查询 start with connect by
- sqlserver下用函数实现 oracle 的树查询( start with connect by ) 功能
- oracle树形查询 start with connect by