在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
where temp.parentid = t.id)
with子句中遞迴with子句達到遞迴查詢的效果
方法2:通過oracle提供的connect by來實現
select id, parentid
from t
connect by id = prior parentid
start with id = '1';
prior在parentid前面表示向下遞迴,在id前面向上遞迴
mysql中遞迴的實現:
mysql中沒有提供connect by這種語法,也沒有with子句,那麼怎麼搞呢?我們定義乙個函式實現
delimiter //
drop function if exists querychildren;
create function `querychildren` (areaid int)
returns varchar(4000)
begin
declare stemp varchar(4000);
declare stempchd varchar(4000);
set stemp = '$';
set stempchd = cast(areaid as char);
while stempchd is not null do
set stemp = concat(stemp,',',stempchd);
select group_concat(id) into stempchd from t_areainfo where find_in_set(parentid,stempchd)>0;
end while;
return stemp;
end;
//
在sql語句使用該函式
select * from t_areainfo where find_in_set(id,querychildrenareainfo(1));
mysql以及oracle的遞迴查詢
在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.parent...
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.檢查要處理的當前值是...