oracle 递归查询 start with connect by prior
来源:互联网 发布:知乎践踏人间一切法律 编辑:程序博客网 时间:2024/05/16 07:21
表结构:
数据:
无序的数据:
id name father_id
1 老太爷
2 大爷爷 1
3 二爷爷 1
4 大爷爷的大儿子 2
5 二爷爷的二儿子 3
6 二爷爷的大儿子 3
7 大爷爷的二儿子 2
8 外姓爷爷
然后开始试试了:
demo1:
select *
from family a
start with a.father_id is null
connect by prior a.id = a.father_id;
查询结果:
行数 id name father_id //后面就不再重复说这个数据顺序了
1 1 老太爷
2 2 大爷爷 1
3 4 大爷爷的大儿子 2
4 7 大爷爷的二儿子 2
5 3 二爷爷 1
6 5 二爷爷的二儿子 3
7 6 二爷爷的大儿子 3
8 8 外姓爷爷
结论:这样是符合我们的平实需求的,start with 后面跟根节点,最高级
connect by prior 后面跟上下级条件。也就是以father_id为空为最高级结点,开始遍 历往下找他们的子孙。
demo2:
select *
from family a
start with a.father_id is null
connect by prior a.father_id = a.id;
查询结果:
1 1 老太爷
2 8 外姓爷爷
结论:connect by prior 后面如果紧跟start with的条件,那么就是向上找父级,如果跟进的是start with后面条件的上下级对应条件,那么就是找子孙。
demo3:
select *
from family a
start with a.father_id = 2
connect by prior a.father_id = a.id;
查询结果:
1 4 大爷爷的大儿子 2
2 2 大爷爷 1
3 1 老太爷
4 7 大爷爷的二儿子 2
5 2 大爷爷 1
6 1 老太爷
结论:针对demo2的结论“connect by prior 后面如果紧跟start with的条件,那么就是向上找父级”,是错误的,正确的应该是:connect by prior 后面如果紧跟start with的条件,那么就是倒着来,而且倒着来到start with的条件还不停止,还会继续倒着找条件的父亲。
demo4:
继续插入数据:
9 9 大爷爷的二儿子的儿子 7
10 10 大爷爷的大儿子的儿子 4
select *
from family a
start with a.father_id = 2
connect by prior a.id = a.father_id ;
结果:
1 4 大爷爷的大儿子 2
2 10 大爷爷的大儿子的儿子 4
3 7 大爷爷的二儿子 2
4 9 大爷爷的二儿子的儿子 7
结论:start with 后面的条件,放在等号后面,确实是查找子孙的顺序查找。
白哥提醒还有个level:就是这样
demo5:
select level, a.*
from family a
where level = 2
start with a.father_id is null
connect by prior a.id = a.father_id ;
结果:
1 2 2 大爷爷 1
2 2 3 二爷爷 1
结论:从start with 开始算第一级
- oracle关键字 start with、、、 connect by prior 子句递归查询
- oracle 递归查询 start with connect by prior
- Oracle start with......connect by prior......子句实现递归查询
- Oracle start with.connect by prior子句实现递归查询
- Oracle start with.connect by prior子句实现递归查询
- Oracle start with.connect by prior子句实现递归查询
- Oracle start with.connect by prior子句实现递归查询
- Oracle start with.connect by prior子句实现递归查询
- Oracle start with...connect by prior 实现递归查询
- 【Oracle】START WITH...CONNECT BY PRIOR...递归查询
- Oracle start with connect by prior 递归查询用法
- oracle start with connect by prior 递归查询用法
- oracle递归查询 start with connect by prior
- 递归查询START WITH CONNECT BY PRIOR
- 递归查询 START WITH CONNECT BY PRIOR
- Oracle:Start with connect by prior 递归
- Oracle 层次查询(递归查询)(level start with connect by prior)
- 用START WITH...CONNECT BY PRIOR子句实现递归查询
- The selected server is enabled 解决办法
- [USACO 2011Jan Gold]道路与航线
- 离别
- Java设计模式_Iterator(迭代容器)
- register_chrdev_region函数源码分析
- oracle 递归查询 start with connect by prior
- NSUInteger 和 NSInteger 区别和联系
- 在listview的前面或后面添加布局控件
- libgdx-demos
- 我也实现全C++的IE容器了
- 如何修改Linux系统的文件权限
- Linux移植之驱动编译出现的问题
- Flex4 拖拽功能
- 英语环境下装中文的