有沒有oracle的內置函式 或者比較好的方法,
即 多叉樹 最近 公共 祖先 LCA 問題
uj5u.com熱心網友回復:
connect byuj5u.com熱心網友回復:
需求大概是這樣的:一個組織機構樹,用戶對部門進行監管的時候,可以 自定義的進行任意的勾選樹上的節點 ,
事件串列 展示 所有監管的部門發生的事件,條件搜索區 可以根據監管的部門下拉樹 進行過濾搜索;
部門下拉樹 ,不監管的部門灰色顯示 并且不可選擇,監管的部門 黑色顯示可以選擇;
組織機構樹層級可能太多, 為了 只監管 最底層的部門人 ,可以不用都從根節點 一層一層 展開,
需要僅展示 他所監管部門的 最近公共祖先, 從最近公共祖先開始展開,有利于用戶體驗。
uj5u.com熱心網友回復:
connect by 可以 遞回查找 某個節點的 所有祖先節點多個已知節點,也固然可以 再用union 按level 排序 再取出排序的第一個 ;比如:
select id,lvl from (
select a.id,a.lvl from
(SELECT ID,level as lvl from t_sys_organization l start with l.id in(200001042) CONNECT BY ID = PRIOR PID) a,
(SELECT ID,level as lvl from t_sys_organization l start with l.id in(200001140) CONNECT BY ID = PRIOR PID) b
where a.id=b.id order by a.lvl
) where rownum=1
但是如果有多個已知節點,比如100個已知節點,需要 做100次 union ,并且已知節點的個數 不確定, 感覺這樣不是最優方案;
uj5u.com熱心網友回復:
SELECT ID,level as lvl from t_sys_organization l start with l.id in(200001042) 這里in 100個節點。select id
from (
select id,minlvl,row_number()over(order by minlvl) rn
from (
select id,min(lvl) minlvl
from (
SELECT ID,level as lvl from t_sys_organization l start with l.id in(200001042,100,101) CONNECT BY ID = PRIOR PID
)
group by id
having count(*)=100
) )
where rn=1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34707.html
標籤:開發
上一篇:rollup與cube
下一篇:pl/sql導表
