-引用别人的表结构
create table test_connect_by (child number,parent number);
insert into TEST_CONNECT_BY (CHILD, PARENT) values (2, 5); insert into TEST_CONNECT_BY (CHILD, PARENT) values (3, 5); insert into TEST_CONNECT_BY (CHILD, PARENT) values (10, 15); insert into TEST_CONNECT_BY (CHILD, PARENT) values (5, 15); insert into TEST_CONNECT_BY (CHILD, PARENT) values (9, 17); insert into TEST_CONNECT_BY (CHILD, PARENT) values (8, 17); insert into TEST_CONNECT_BY (CHILD, PARENT) values (15, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (17, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (6, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (13, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (1, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (12, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (11, 18); insert into TEST_CONNECT_BY (CHILD, PARENT) values (7, 18); insert into TEST_CONNECT_BY (CHILD, PARENT) values (38, null); insert into TEST_CONNECT_BY (CHILD, PARENT) values (26, null); insert into TEST_CONNECT_BY (CHILD, PARENT) values (18, null); commit;
---------------------------------------
select a.child, a.parent, level "层次", sys_connect_by_path(child, '->') "合并层次", prior a.child "父节点", connect_by_root a.child "根节点", decode(connect_by_isleaf, 1, a.child, null) "子节点", decode(connect_by_isleaf, 1, '是', '否') "是否子节点" from test_connect_by a start with a.parent is null --从parent为空开始扫描 connect by prior a.child = a.parent --以child为父列连接parent order siblings by child desc --对层次排序 ;
转贴:
Oracle Connect By用法
oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:
select ... from <TableName> where <Conditional-1> start with <Conditional-2> connect by <Conditional-3> ;
<Conditional-1>:过滤条件,用于对返回的所有记录进行过滤。 <Conditional-2>:查询结果重起始根结点的限定条件。 <Conditional-3>:连接条件
数据组织结构如下图:
数据库表结构如下:
create table t2( root_id number, id number, name varchar(5), description varchar(10) );
insert into t2(root_id,id,name,description) values(0,1,'a','aaa'); insert into t2(root_id,id,name,description) values(1,2,'a1','aaa1'); insert into t2(root_id,id,name,description) values(1,3,'a2','aaa2'); insert into t2(root_id,id,name,description) values(0,4,'b','bbb'); insert into t2(root_id,id,name,description) values(4,5,'b1','bbb1'); insert into t2(root_id,id,name,description) values(4,6,'b2','bbb2');
获取完整树: select * from t2 start with root_id = 0 connect by prior id = root_id;
获取特定子树: select * from t2 start with id = 1 connect by prior id = root_id;
select * from t2 start with id = 4 connect by prior id = root_id;
如果connect by prior中的prior被省略,则查询将不进行深层递归。 如:
select * from t2 start with root_id = 0 connect by id = root_id;
select * from t2 start with id = 1 connect by id = root_id; 如:
| |
|