mysql以及oracle的遞迴查詢

2021-07-05 13:09:04 字數 1817 閱讀 3231

在oracle中實現遞迴查詢的途徑較多

方法1:通過with子句實現遞迴

[sql]view plain

copy

with

temp

(id,parentid) 

as(  

select

id,parentid  

from

t  where

t.id = 

'1'union

allselect

t.id, t.parentid  

from

temp

, t  

where

temp

.parentid = t.id)  

with子句中遞迴with子句達到遞迴查詢的效果

方法2:通過oracle提供的connect by來實現

[sql]view plain

copy

select

id, parentid  

from

t  connect

byid = 

prior

parentid  

start with

id = 

'1';  

prior在parentid前面表示向下遞迴,在id前面向上遞迴

mysql中遞迴的實現:

mysql中沒有提供connect by這種語法,也沒有with子句,那麼怎麼搞呢?我們定義乙個函式實現

[sql]view plain

copy

delimiter //  

drop

function

if exists querychildren;  

create

function

`querychildren` (areaid 

int)  

returns

varchar

(4000)  

begin

declare

stemp 

varchar

(4000);  

declare

stempchd 

varchar

(4000);  

setstemp = 

'$';  

setstempchd = 

cast

(areaid 

aschar

);  

while stempchd is

notnull

do  

setstemp = concat(stemp,

',',stempchd);  

select

group_concat(id) 

into

stempchd 

from

t_areainfo 

where

find_in_set(parentid,stempchd)>0;  

endwhile;  

return

stemp;  

end;  

//  

在sql語句使用該函式

[sql]view plain

copy

select

* from

t_areainfo 

where

find_in_set(id,querychildrenareainfo(1));  

mysql以及oracle的遞迴查詢

在oracle中實現遞迴查詢的途徑較多 方法1 通過with子句實現遞迴 with temp id,parentid as select id,parentid from t where t.id 1 union all select t.id,t.parentid from temp,t wher...

oracle分頁以及mysql分頁

oracle分頁 分頁邏輯 第三層限制最小記錄數 第二層限制最大記錄數 第一層做條件限制 分頁例子 select from select from select rownum as rnum,empno from emp where rnum 10 where rnum 5 mysql分頁 sele...

通俗的理解遞

在學習遞迴的過程中,個人感覺真的晦澀難懂,遞迴就是函式自己呼叫自己。遞迴程式的基本步驟 1.初始化演算法。遞迴程式通常需要乙個開始時使用的種子值 seed value 2.要完成此任務,可以向函式傳遞引數,或者提供乙個入口函式,這個函式是非遞迴的,但可以為遞迴計算設定種子值。3.檢查要處理的當前值是...