Sql级联查询递归查询start with 。。。connect by prior child=parent
来源:互联网 发布:linux删除文件内容命令 编辑:程序博客网 时间:2024/06/05 09:59
转自http://blog.chinaunix.net/uid-3634-id-2129988.html
分类: Oracle
最近缴费卡并卡事件较多,为了方便跟踪,使用start with……connect by可以对卡的并卡状况进行一系列的跟踪。例如:
SQL> SELECT LPAD(outcardnumber, LENGTH(outcardnumber)+(LEVEL*2) -2,'_')
2 AS cardnumber
3 FROM rcpms.rcpms_unitecard
4 START WITH outcardnumber='030399529176'
5 CONNECT BY PRIOR incardnumber=outcardnumber;
2 AS cardnumber
3 FROM rcpms.rcpms_unitecard
4 START WITH outcardnumber='030399529176'
5 CONNECT BY PRIOR incardnumber=outcardnumber;
CARDNUMBER
--------------------------------------------------------------------------------
030399529176
__030386295685
____030350690996
______030394432312
________030361447641
__________030389355736
____________030352075862
______________030366761588
________________030387064026
__________________030365336999
____________________030334258646
______________________030355463544
________________________030318082105
__________________________030301996949
--------------------------------------------------------------------------------
030399529176
__030386295685
____030350690996
______030394432312
________030361447641
__________030389355736
____________030352075862
______________030366761588
________________030387064026
__________________030365336999
____________________030334258646
______________________030355463544
________________________030318082105
__________________________030301996949
SQL> SELECT LPAD(outcardnumber, LENGTH(outcardnumber)+(LEVEL*2) -2,'_')
2 AS cardnumber
3 FROM rcpms.rcpms_unitecard
4 START WITH outcardnumber='030399529176'
5 CONNECT BY PRIOR outcardnumber=incardnumber;
2 AS cardnumber
3 FROM rcpms.rcpms_unitecard
4 START WITH outcardnumber='030399529176'
5 CONNECT BY PRIOR outcardnumber=incardnumber;
CARDNUMBER
--------------------------------------------------------------------------------
030399529176
__030383691552
____030397699599
______030356960881
________030346210764
__________030320028697
____________030339419184
______________030357446358
________________030341150148
__________________030300297116
____________________030308827641
--------------------------------------------------------------------------------
030399529176
__030383691552
____030397699599
______030356960881
________030346210764
__________030320028697
____________030339419184
______________030357446358
________________030341150148
__________________030300297116
____________________030308827641
这里,根据connect子句中条件的位置不同可以实现向上或向下的分级查询,即第一个例子是以030399529176作为并出卡跟踪一系列的并入卡,第二个例子是以同样的030399529176作为并入卡,找出一系列的并出卡。
自顶向下的规则是:
Top down: Column1 = Parent Key
Column2 = Child Key
Column2 = Child Key
自底向上的规则是
Bottom up Column1 = Child Key
Column2 = Parent Key
Bottom up Column1 = Child Key
Column2 = Parent Key
例1中可以理解为incardnumber的子行去等于outcardnumber的父行,因此是一种自底向上的行为。例2可以理解为outcardnumber的子行去等于incardnumber的父行,因此是一种自上而下的行为
另外,这里lpad函数用来填充字段串左边的位置,从而达到格式化的目的。
这里需要注意使用start with……connect by子句还需要注意where和connect by中条件的区别,
例如 where outmoney=100是去除了outmoney不等于的100的树中的所有节点,而
CONNECT BY PRIOR outcardnumber=incardnumber and outmoney=100将去除不等于100的节点下的所有分支。
0 0
- Sql级联查询递归查询start with 。。。connect by prior child=parent
- 递归查询START WITH CONNECT BY PRIOR
- 递归查询 START WITH CONNECT BY PRIOR
- 用START WITH...CONNECT BY PRIOR子句实现递归查询
- oracle关键字 start with、、、 connect by prior 子句递归查询
- 让hibernate支持递归、start with connect by prior 查询
- oracle 递归查询 start with connect by prior
- 让hibernate支持递归、start with connect by prior 查询
- 让hibernate支持递归、start with connect by prior 查询
- 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子句实现递归查询
- 出现Unable to execute dex: Multiple dex files define Landroid/support/annotation/AnimRes的一种可能原因
- Mac OS X上安装 Ruby运行环境
- spring mvc 源码(二) MultiActionController 处理流程(转)
- C语言: 按照格式返回系统时间的的函数
- Android WebRTC 音视频开发总结(二)
- Sql级联查询递归查询start with 。。。connect by prior child=parent
- iOS帐号、证书之漫谈(五)—— 申请企业开发帐号
- 新笔记本win8装win7真是坑了我N次,完美解决方案
- Linux 网络编程——原始套接字实例:发送 UDP 数据包
- Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南
- SDB文件注册实际流程(学习笔记)
- MySQL函数大全 及用法示例
- iOS开发property属性浅析
- Android WebRTC 音视频开发总结(三)