關於遞迴的記錄

2021-09-29 16:04:11 字數 874 閱讀 7827

由於專案的原因接觸了三種資料庫,分別是oracle、mysql、postgresql,在此記錄一下三種資料庫遞迴查詢的用法(以查詢某節點下所有子節點為例)!

1、oracle——有自帶的遞迴函式,一般最上級我都不用遞迴,直接查全部

select t.* from sys_postorg t start with id = '11010101' connect by prior parent_id = id
2、mysql——這個寫法我在資料量4萬的情況下速率極慢,不建議使用,而且佔臨時記憶體。

select id from (select t1.id,

if(find_in_set(parent_id , @pids) > 0, @pids := concat(@pids, ',', id), 0) as ischild

from (

select id,parent_id from sys_postorg t order by parent_id ,id

) t1,(select @pids := #) t2) t3 where ischild != 0

3、postgresql——沒有遞迴函式

with recursive r as (

select * from sys_postorg where id = 7

union all

select sys_postorg .* from sys_postorg , r where sys_postorg .id = r.parent_id

)select * from r order by id;

資料量大的情況下影響速率,優化問題看具體情況。

關於遞迴的使用記錄

此篇部落格 於極好的文章,解決了遞迴入門的疑難點。何為遞迴?程式反覆呼叫自身即是遞迴。我自己在剛開始解決遞迴問題的時候,總是會去糾結這一層函式做了什麼,它呼叫自身後的下一層函式又做了什麼 然後就會覺得實現乙個遞迴解法十分複雜,根本就無從下手。相信很多初學者和我一樣,這是乙個思維誤區,一定要走出來。既...

關於遞迴寫法的精妙記錄

之前對遞迴的了解就限制於 n!之類的用法,在學習python的過程中,接觸到了關於漢諾塔的移動的遞迴介紹,覺得遞迴實在是神奇。這種思想的迸發我希望能記錄下來,並激勵。def move n,a,b,c if n 1 print a,c return move n 1,a,c,b print a,c m...

遞迴演算法記錄

遞迴顯示部門 catch ioexception e if depmap.size 0 遞迴查詢檔案夾目錄 注意 需要的遞迴返回結果是什麼,比如此處需要children的list public jsonobject foldertree 從一級目錄開始遍歷 for filefolder folder...