`

Oracle的递归

 
阅读更多
create table t2(
		  t_id number,
		   t_root_id number,
		  t_name varchar(5),
		  t_description varchar(10)
		 );  

Truncate Table T2;

insert into t2(t_root_id,t_id,t_name,t_description) values(0,1,'a','aaa'); 
insert into t2(t_root_id,t_id,t_name,t_description) values(1,2,'a1','aaa1');
insert into t2(t_root_id,t_id,t_name,t_description) values(1,3,'a2','aaa2');
insert into t2(t_root_id,t_id,t_name,t_description) values(0,4,'b','bbb');
insert into t2(t_root_id,t_id,t_name,t_description) values(4,5,'b1','bbb5');
insert into t2(t_root_id,t_id,t_name,t_description) values(4,6,'b2','bbb6');
insert into t2(t_root_id,t_id,t_name,t_description) values(6,8,'bbb1','bbb8');
insert into t2(t_root_id,t_id,t_name,t_description) values(6,9,'b2','bbb9');
insert into t2(t_root_id,t_id,t_name,t_description) values(5,7,'bbb','bbb7');

insert into t2(t_root_id,t_id,t_name,t_description) values(0,10,'bbb','bbb');
insert into t2(t_root_id,t_id,t_name,t_description) values(10,11,'bbb1','bbb1');
insert into t2(t_root_id,t_id,t_name,t_description) values(10,12,'b2','bbb2');

Select * From t2;

/*
   start with ... connect by prior ... 是实现递归查询,一般用来获取“树”型结构的数据。

   start with t_root_id = 0 : 即根节点等于0的,start with条件是用来限制根节点的条件。
   
   connect by prior t_id = t_root_id : prior的意思是:上一条记录的t_id 等于这一条记录的 t_root_id
           如果省略prior,意味不递归,即:不取子节点,只取根节点。
**/

---- 全树
select * from t2 start with t_root_id = 0 connect by prior t_id = t_root_id;

---- 特定子树
select * from t2 start with t_id = 4 connect by prior t_id = t_root_id;
select * from t2 start with t_id = 1 connect by prior t_id = t_root_id;

---- 如果connect by prior中的prior被省略,则查询将不进行深层递归。
select * from t2 start with t_root_id = 0 connect by t_id = t_root_id;
select * from t2 start with t_id = 1 connect by t_id = t_root_id;

/*
   Sys_Connect_By_Path函数(Oracle9i后出来的新函数),是将父节点和子节点的指定字段拼接起来。
                                      ******************                                          
                                      *  id=4,desc=bbb *  
                                      ******************
                                        *            *
                                       *              *
                       *******************            *******************                                  
                       *  id=5,desc=bbb5 *            *  id=6,desc=bbb6 *
                       *******************            *******************    
                          *                                *          *
             ******************             ******************    ******************                                   
             *  id=7,desc=bbb7*             *  id=8,desc=bbb8*    *  id=9,desc=bbb9* 
             ******************             ******************    ******************
                                                       
     如图所示的,那么下面的sql的结果为(六条记录):
     ,bbb            (此为根节点id=4的t_Description字段值与‘,’的拼接)
     ,bbb,bbb5       (此为左子节点id=5的t_Description字段值与父节点的t_Description的拼接)
     ,bbb,bbb5,bbb7   (此为父节点为id=5的子节点id=7的t_Description字段值与父节点的t_Description的拼接)
     ,bbb,bbb6       (此为右子节点id=6的t_Description字段值与父节点的t_Description的拼接)
     ,bbb,bbb6,bbb8  
     ,bbb,bbb6,bbb9
     
     总结:Sys_Connect_By_Path拼接函数,适用于树形结构的数据,拼接原理是:从根节点往下,每一个
     子节点的指定字段与父节点的指定字段拼接
********************************************************************************************************/
Select Sys_Connect_By_Path(t.t_Description, ',')
  From T2 t
 Start With t.t_Id = 4
Connect By Prior t.t_Id = t.t_Root_Id;

----与上面的拼接sql比较,查看拼接效果。
Select * From T2 Start With t_Id = 4 Connect By Prior t_Id = t_Root_Id;

 

分享到:
评论

相关推荐

    Oracle递归树形结构查询功能

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下

    Oracle 递归函数介绍

    Oracle 递归函数介绍

    oracle递归查询的例子

    oracle递归查询的例子,一个从创建表到查询的完整的例子。oralce递归查询是一个很实用的语句,在sqlserver目前还没有,但是语法常常不容易被我们记住,所以本人总结了一下,写到文档里了。

    oracle递归、迭代

    Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……

    oracle递归查询向上向下.txt

    oracle递归查询

    Oracle递归SQL学习

    Oracle使用递归SQL展示一棵树

    oracle-递归查询地区名称

    oracle 递归调用 地区 ,用到的方法是 SYS_CONNECT_BY_PATH,可以扩展层级 名称

    dhtmlx tree 使用,与oracle递归查询的结合

    dhtmlx tree oracle递归查询,比起在程序中用递归查询,速度大大提高。

    深入sql oracle递归查询

    本篇文章是对sql oracle 递归查询进行了详细的分析介绍,需要的朋友参考下

    递归查询菜单树,支持mysql,oracle

    递归查询菜单树,支持mysql,oracle,含表结构,递归查询菜单,支持mysql,oracle,含表结构递归查询菜单。

    Oracle递归查询

    有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库 ...下面我以最典型的树形结构来说明下如何在Oracle使用递归查 询。 为了说明方便,创建一张数据库表,用于存储一个简单的树形结构

    递归查询父子关系记录 oracle

    oracle 如何递归查询父子关系。经常用于构造树结构

    Oracle递归查询start with connect by prior的用法

    主要给大家介绍了关于Oracle递归查询start with connect by prior、的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    MySQL多种递归查询方法.docx

    Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start ...

    Oracle通过递归查询父子兄弟节点方法示例

    主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    Oracle Form自动生成序号

    讲解如何在Form(父子结构)中自动生成行号,并且行号可以修改,修改后的行号依然会按照最大的行号网上递增,类似采购订单Form的行号逻辑

    oracle 使用递归的性能提示测试对比

    先递归循环出某个文件夹下面的所有的文件夹以及文件在关联文件表查找文件的内容这是正确的做法,感兴趣的朋友可以了解下,或许对你学习oracle递归有所帮助

    使用over函数实现递归汇总计算

    Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。

Global site tag (gtag.js) - Google Analytics