Oracle如何實(shí)現(xiàn)層次化查詢

小編給大家分享一下Oracle如何實(shí)現(xiàn)層次化查詢,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了東蘭免費(fèi)建站歡迎大家使用!

Oracle層次化查詢

(1)樹(shù)狀模型

假如有一個(gè)市場(chǎng)模型,其中一級(jí)市場(chǎng)是中國(guó),二級(jí)市場(chǎng)是省份,三級(jí)市場(chǎng)是各個(gè)省下面的市,四級(jí)市場(chǎng)是各個(gè)市下面的縣。那么可以創(chuàng)建表market:

create table market(market_id number(2), market_name varchar2(10), parent_market_id number(2));

insert all

into market values(1, 'China', 0)

into market values(2, 'Shan Xi', 1)

into market values(3, 'Shan Dong', 1)

into market values(4, 'Fu Jian', 1)

into market values(5, 'Tai Yuan', 2)

into market values(6, 'Yang Quan', 2)

into market values(7, 'Qi Zhou', 2)

into market values(8, 'Qing Dao', 3)

into market values(9, 'Ji Nan', 3)

into market values(10, 'Yan Tai', 3)

into market values(11, 'Xia Men', 4)

into market values(12, 'Fu Zhou', 4)

into market values(13, 'Quan Zhou', 4)

into market values(14, 'Gu Jiao', 5)

into market values(15, 'Yang Qu', 5)

into market values(16, 'Qing Xu', 5)

select * from dual;

(2)層次化查詢

select market_id, market_name

from market

start with market_name = 'Shan Xi'

connect by prior market_id = parent_market_id;

MARKET_ID MARKET_NAME

---------- ------------------------------

2 Shan Xi

5 Tai Yuan

14 Gu Jiao

15 Yang Qu

16 Qing Xu

6 Yang Quan

7 Qi Zhou

7 rows selected.

這里的搜索規(guī)則為:從'Shan Xi'節(jié)點(diǎn)開(kāi)始搜索、前一個(gè)節(jié)點(diǎn)的market_id等于下一個(gè)節(jié)點(diǎn)的parent_markket_id。

(3)相關(guān)函數(shù)

顯示搜索路徑的函數(shù)為

sys_connect_by_path(列名,分隔符)

示例:

select market_id, market_name, sys_connect_by_path(market_name, '/') as market_path

from market

start with market_name = 'Gu Jiao'

connect by prior parent_market_id = market_id;

MARKET_ID MARKET_NAM MARKET_PATH

---------- ---------- ----------------------------------------

14 Gu Jiao    /Gu Jiao

5 Tai Yuan   /Gu Jiao/Tai Yuan

2 Shan Xi    /Gu Jiao/Tai Yuan/Shan Xi

1 China      /Gu Jiao/Tai Yuan/Shan Xi/China

這里可以利用max()函數(shù)來(lái)獲得完整的路徑:

select max(sys_connect_by_path(market_name, '/')) market_path

from market

start with market_name = 'Gu Jiao'

connect by prior parent_market_id = market_id;

MARKET_PATH

----------------------------------------

以上是“Oracle如何實(shí)現(xiàn)層次化查詢”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)名稱:Oracle如何實(shí)現(xiàn)層次化查詢
網(wǎng)址分享:http://bm7419.com/article26/igdhcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站企業(yè)網(wǎng)站制作、網(wǎng)站策劃、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司