網(wǎng)上摘錄。
一、樹型表結(jié)構(gòu):
節(jié)點(diǎn)ID? 上級ID? 節(jié)點(diǎn)名稱
二、公式:
select 節(jié)點(diǎn)ID,節(jié)點(diǎn)名稱,level
?????? from 表
?????? connect by prior 節(jié)點(diǎn)ID=上級節(jié)點(diǎn)ID
?????? start with 上級節(jié)點(diǎn)ID=節(jié)點(diǎn)值
????? 說明:
????? 1、常見的樹形結(jié)構(gòu)為公司組織機(jī)構(gòu)、地區(qū)……
2、求節(jié)點(diǎn)ID以上的結(jié)構(gòu),或以上的結(jié)構(gòu),將“節(jié)點(diǎn)ID=上級節(jié)點(diǎn)ID”左右順序換一下即可。
3、Level為Oracle的特殊字段,表示“層”的意思。當(dāng)前節(jié)點(diǎn)ID的下一層節(jié)點(diǎn)為“1”。
???? 測試SQL:
??????????? 說明1、求002以下(或以上)所有子節(jié)點(diǎn)和層次(動態(tài):總是從1開始算),但不包括自身
??????????? 說明2、如果求002以上的節(jié)點(diǎn),則“connect by prior topno=departno”,“=”兩邊的條件換位即可。
??????????? select departno,departname,level
??????????? from dept
??????????? connect by prior departno=topno
??????????? start with topno='002';
????? 測試數(shù)據(jù)
???? ? create table Dept(
?? DepartNO? varchar2(10),
????????? DepartName? varchar2(20),
????????? TopNo??? varchar2(10));
????????? insert into Dept values('001',' 董事會','0');
? insert into Dept values('002','總裁辦 ','001');
insert into Dept values('003','財務(wù)部 ','001');
insert into Dept values('004','市場部 ','002');
insert into Dept values('005','公關(guān)部 ','002');
insert into Dept values('006','銷售部 ','002');
insert into Dept values('007','分銷處 ','006');
insert into Dept values('008','業(yè)務(wù)拓展處','004');
insert into Dept values('009','銷售科','007');
向前查 比如
select distinct departno,departname,level
from dept
connect by prior topno=departno
start with
departno='005';
那么其實(shí)是查005自身以及上級, 所以結(jié)果是005,002,001
============================================================================================
?????? 寫遞歸最關(guān)鍵的要定義出來 遞歸函數(shù) ,遞歸函數(shù) 最關(guān)鍵的要定義出來它的 參數(shù) .和它的 返回值 咱么做展現(xiàn),不用返回值,直接做展現(xiàn)就行了,參數(shù)最重要,那就分析一下參數(shù)怎么去定義?這時候要分析遞歸的過程,遞歸過程什么樣呢?根據(jù)它的 id 找它的 父id,根據(jù)它的 父id 找到它的孩子,根據(jù)它 的孩子再找到它的孩子.那么分析這個參數(shù)肯定是一個id,因?yàn)橹挥袀鬟M(jìn)來id,才知道怎么去找這個id
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
