首页 > Oracle > oracle递归查询,找出符合条件的用户
2016
08-04

oracle递归查询,找出符合条件的用户

table1表示用户关系,是一个二叉树的关系,每一个父节点最多只会有2个子节点。
table2表示用户的钱。MONEY 表示用户自己的钱,ALLmoneY表示该用户 以及该下级所有用户的钱,RID表示用户注册先后顺序

oracle递归查询,找出符合条件的用户 - 第1张  | Jerry大数据之路需求:现在需要查询某个会员下面每一个层级钱最多(根据allmoney判断),且只需要最后一个层级。
比如:A用户,子节点有B和C用户,B用户的allmoney是700,C用户的allmoney是1400,就取到C。然后C按照同样的逻辑,
继续往下取,取到G,然后H和I的是一样的,根据table2表的rid,取最早的一个,取到H,H下面只有一个J,
只有一个节点,说明另一个节点为0,取到J,J用户没有下级。最后返回J

实现一:

实现二:代码中的C表实际就是每个用户之间的位置层次关系(就相当于一个递归sql,已经形成表数据),T表就是用户的money,B表就是用户推荐关系(表中的用户no的唯一的)

实现三:(这个方法可能不适合,不过想到办法可以留作后期参考用)

两个参数:sys_connect_by_path(lpad(allmoney, 8, ‘0’) || (100000 – rid),’->’) ph
8:要求大于等于allmoney作为字符串的最大长度
100000:要求大于等于最大顺序数

 

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL