網(wǎng)站正在建設(shè)中 文案seo網(wǎng)站建站
概要
樹狀結(jié)構(gòu)通常由根節(jié)點、父節(jié)點(PID)、子節(jié)點(ID)和葉節(jié)點組成。
查詢語法
SELECT [LEVEL],*
FROM table_name
START WITH 條件1
CONNECT BY PRIOR 條件2
WHERE 條件3
ORDER BY 排序字段
說明:LEVEL—偽列,用于表示樹的層次(用于查詢結(jié)果所在層次,根節(jié)點的層次為1)
條件1—根節(jié)點的限定條件,當然也可以放寬權(quán)限,以獲得多個根節(jié)點,也就是獲取多個樹(即:start with 后面的條件表示遞歸從哪里開始。)
條件2—連接條件,目的就是給出父子之間的關(guān)系是什么,根據(jù)這個關(guān)系進行遞歸查詢(即:遞歸時前后兩條數(shù)據(jù)是以條件2來建立聯(lián)系的)
條件3—過濾條件,對所有返回的記錄進行過濾。
排序字段—對所有返回記錄進行排序
prior使用
prior的位置決定了遞歸時的具體關(guān)系或者說是決定了查詢時的檢索順序,prior 字段1=字段2 可以理解為當前節(jié)點的字段1等于下一個節(jié)點的字段2。
兩種寫法:
connect by prior dept_id=par_dept_id 表示采用自上而下的搜索方式(先找父節(jié)點然后找子節(jié)點)
connect by dept_id=prior par_dept_id 表示采用自下而上的搜索方式(先找葉子節(jié)點然后找父節(jié)點)
舉例
語法:
select
from 表名 t
where 過濾條件
start with t.PID=xx --開始根節(jié)點
connect by prior t.ID=t.PID
SELECT t.JGBHFROM GG_JGBH twhere SYBZ = 1START WITH t.SJJG = (select SJJG from GG_JGBH where JGBH = '0001')
CONNECT BY PRIOR t.JGBH = t.SJJG
但上速查詢的內(nèi)容不包括“開始根節(jié)點”所對應(yīng)的數(shù)據(jù),此時我的解決方式是使用OR來關(guān)聯(lián)
select E_ADDRESS.*, (select jgmc from gg_jgbh where jgbh = account) jgmcfrom E_ADDRESSwhere ACCOUNT = (select SJJG from GG_JGBH where JGBH = '0001')or ACCOUNT in(SELECT t.JGBHFROM GG_JGBH twhere SYBZ = 1START WITH t.SJJG = (select SJJG from GG_JGBH where JGBH = '0001')CONNECT BY PRIOR t.JGBH = t.SJJG)
引用文章
http://www.dbs724.com/10240.html
https://blog.csdn.net/lwh_zfj/article/details/90180260