在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.檢查要處理的當前值是...