usermoney表:
需求:需要查詢各級使用者的money總和,比如,查詢userid=2的使用者的money總和需要包括他的子級以及衍生子級的money總和,以此類推
第一步:
1通過cte表的遞迴可以求出各個userid的遞迴深度(level_),結果如圖:with cte(userid,money,level_) as2(
3select userid, money, 1
as level_ from
usermoney
4union
all5
select m.userid,m.money,a.level_ +16
from
cte a
7inner
join
usermoney m
8on a.userid=
m.pid9)
1011
12select
*from cte
我們可以再加一列path_ 來直觀的看出父子節點的關係:
with cte(userid,money,level_,path_) as結果如下:(select userid, money, 1
as level_ ,''
as path_ from
usermoney
union
allselect m.userid,m.money,a.level_ +
1,m.pid||',
'||a.path_
from
cte a
inner
join
usermoney m
on a.userid=
m.pid
)select
*from cte
需要注意的是 我們要取遞迴深度最深的記錄,例如userid=4的記錄既有level_=2的記錄也有level_=3的記錄,我們要取level_=3的那條記錄 即path_=2,1, 那一條
計算總和就應該是userid=4的money+userid=2的money+userid=1的money
方法2:oracle:
oracle 遞迴查詢 Oracle遞迴查詢
1.1 建立表與插入資料 create table district id number 10 not null,parent id number 10 name varchar2 255 byte not null alter table district add constraint distr...
mysql遞迴查詢統計 mysql遞迴查詢
樣例資料 create table treenodes id int primary key,nodename varchar 20 pid int select from treenodes id nodename pid 1 a 0 2 b 1 3 c 1 4 d 2 5 e 2 6 f 3 7...
mysql 遞迴查詢效率 mysql 遞迴查詢
set stemp set stempchd cast id as char 轉化資料格式 while stempchd is not null do 開始迴圈 set stemp concat stemp,stempchd 字串拼接 select group concat id into stem...