SQL CTE遞迴查詢

2022-03-08 19:36:18 字數 1773 閱讀 8936

usermoney表:

需求:需要查詢各級使用者的money總和,比如,查詢userid=2的使用者的money總和需要包括他的子級以及衍生子級的money總和,以此類推

第一步:

1

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

通過cte表的遞迴可以求出各個userid的遞迴深度(level_),結果如圖:

我們可以再加一列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...