开发者社区> 科技小先锋> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

start with ...connect by的用法

简介:
+关注继续查看


  1. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。  
  2. 创建示例表:  
  3. CREATE TABLE TBL_TEST  
  4. (  
  5. ID NUMBER,  
  6. NAME VARCHAR2(100 BYTE),  
  7. PID NUMBER DEFAULT 0  
  8. );  
  9. 插入测试数据:  
  10. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');  
  11. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');  
  12. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');  
  13. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');  
  14. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');  
  15. 从Root往树末梢递归  
  16. select * from TBL_TEST  
  17. start with id=1  
  18. connect by prior id = pid  
  19. 从末梢往树ROOT递归  
  20. select * from TBL_TEST  
  21. start with id=5  
  22. connect by prior pid = id  
  23. =====  
  24. 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:  
  25. id,pid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。  
  26. 用上述语法的查询可以取得这棵树的所有记录。  
  27. 其中:  
  28.  
  29. 条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。  
  30. 条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = pid就是说上一条记录的id 是本条记录的pid,即本记录的父亲是上一条记录。  
  31. 条件3 是过滤条件,用于对返回的所有记录进行过滤。  
  32.  
  33.  
  34.  
  35. 简单介绍如下:  
  36.  
  37. 早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:  
  38. 第一步:从根节点开始;  
  39. 第二步:访问该节点;  
  40. 第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;  
  41. 第四步:若该节点为根节点,则访问完毕,否则执行第五步;  
  42. 第五步:返回到该节点的父节点,并执行第三步骤。  
  43.  
  44. 总之:扫描整个树结构的过程也即是中序遍历树的过程。  
  45.  
  46.  
  47. 按照上面给的分析即可对表中的数据构进行分析,以上的方法只适合表中有一棵树的情况。 

 


本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/380296,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Flink - 本地执行 Failed to start the Queryable State Data Server
Flink 本地执行任务报错 Failed to start the Queryable State Data Server 以及 Unable to start Queryable State Server. All ports in provided range are occupied. 根据报错分析是因为本地端口被占用,没有足够端口供 Flink 本地客户端启动,所以解决方法就是处理被占用的端口。...
0 0
pg_ctl: server did not start in time
postgresql 启动超时异常,可怎么解决
0 0
start 与 run 区别
start 与 run 区别
0 0
[MySQL学习笔记]case when then else end用法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/51549260 Case具有两种格式。
750 0
set_error_handler() 重要用法
转自just code 原文地址http://justcoding.iteye.com/blog/848711 set_error_handler这个函数的作用是为了防止错误路径泄露   何为错误路径泄露呢? 我们写程序,难免会有问题(是经常会遇到问题  ),而PHP遇到错误时,就会给出出错脚本的位置、行数和原因 有很多人说,这并没有什么大不了。
723 0
SQLServer2000错误解决(Server: Msg 446, Level 16, State
当SQLSERVER2000发生下面错误时,Msg 446, Level 16, State 9, Server CTSSERV, Line 1 Cannot resolve collation conflict for equal to operation(中文:  无法解决   equal   to   操作的排序规则冲突。
338 0
MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the W
早晨宁波那边的IT人员打电话告知数据库无法访问了。其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情况,就收到了电话。
1525 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
HBase Current State and Future : Community View
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载