欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

connect by prior start with

系統 1641 0

在oracle中通過connect by prior來實現遞歸查詢[zt]


收集的幾條在oracle中通過 connect ? by ? prior 來實現遞歸查詢

?

Start with... Connect ? By 子句遞歸查詢一般用于一個表維護樹形結構的應用。
創建示例表:
CREATE TABLE TBL_TEST
(
ID??? NUMBER,
NAME VARCHAR2(100 BYTE),
PID?? NUMBER????????????????????????????????? DEFAULT 0
);

插入測試數據:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');

從Root往樹末梢遞歸
select * from TBL_TEST
start with id=1
connect ? by ? prior ? id = pid

從末梢往樹ROOT遞歸
select * from TBL_TEST
start with id=5
connect ? by ? prior ? pid = id


===============================================================================================================

有一張表?? t?? ?
字段:?? ?
parent?? ?
child?? ?
兩個字段的關系是父子關系?? ?
??? ?
寫一個sql語句,查詢出指定父下面的所有的子?? ?
??? ?
比如?? ?
??? ?
a?? b?? ?
a?? c???? ?
a?? e?? ?
b?? b1?? ?
b?? b2?? ?
c?? c1?? ?
e?? e1?? ?
e?? e3?? ?
d?? d1?? ?
??? ?
指定parent=a,選出?? ?
a?? b?? ?
a?? c???? ?
a?? e?? ?
b?? b1?? ?
b?? b2?? ?
c?? c1?? ?
e?? e1?? ?
e?? e3?? ?
??? ?
SQL語句:?? ?
select?? parent,child?? from?? test?? start?? with?? parent='a'?? ?
connect ?? ? by ?? ? prior ?? child=parent??


================================================================================================

connect ? by ? 是結構化查詢中用到的,其基本語法是: ?
select ... from tablename start ? by ? cond1 ?
connect ? by ? cond2 ?
where cond3; ?
簡單說來是將一個樹狀結構存儲在一張表里,比如一個表中存在兩個字段: ?
id,parentid那么通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。 ?
用上述語法的查詢可以取得這棵樹的所有記錄。 ?
其中COND1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。 ?
COND2是連接條件,其中用 PRIOR 表示上一條記錄,比如 ? CONNECT ? BY ? PRIOR ? ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。 ?
COND3是過濾條件,用于對返回的所有記錄進行過濾。

PRIOR 和START WITH關鍵字是可選項
PRIORY運算符必須放置在連接關系的兩列中某一個的前面。對于節點間的父子關系, PRIOR
運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構是的順序是自頂向下還是
自底向上。在連接關系中,除了可以使用列名外,還允許使用列表達式。START WITH 子句為
可選項,用來標識哪個節點作為查找樹型結構的根節點。若該子句被省略,則表示所有滿足查詢
條件的行作為根節點。
完整的例子如SELECT PID,ID,NAME FROM T_WF_ENG_WFKIND START WITH PID =0 ? CONNECT ? BY ? PRIOR ? ID = PID


以上主要是針對上層對下層的順向遞歸查詢而使用start with ... ? connect ? by ? prior ? ...這種方式,但有時在需求需要的時候,可能會需要由下層向上層的逆向遞歸查詢,此是語句就有所變化:例如要實現 select * from table where id in ('0','01','0101','0203','0304') ;現在想把0304的上一級03給遞歸出來,0203的上一級02給遞歸出來,而01現在已經是存在的,最高層為0.而這張table不僅僅這些數據,但我現在只需要('0','01','0101','0203','0304','02','03')這些數據,此時語句可以這樣寫SELECT PID,ID,NAME FROM V_WF_WFKIND_TREE WHERE ID IN (SELECT DISTINCT(ID) ID FROM V_WF_WFKIND_TREE ? CONNECT ? BY ? PRIOR ? PID = ID START WITH ID IN ('0','01','0101','0203','0304') );

其中START WITH ID IN里面的值也可以替換SELECT 子查詢語句.


注意由上層向下層遞歸與下層向上層遞歸的區別在于START WITH... CONNECT ? BY ? PRIOR ...的先后順序以及 ID = PID 和 PID = ID 的微小變化!

?

?

====================================另一種說明法

Oracle中的select語句可以用start with...connect by prior子句實現遞歸查詢,connect by 是結構化查詢中用到的,其基本語法是:

select ... from <TableName>
where <Conditional-1>
start with <Conditional-2>
connect by <Conditional-3>;

<Conditional-1>:過濾條件,用于對返回的所有記錄進行過濾。
<Conditional-2>:查詢結果重起始根結點的限定條件。
<Conditional-3>:連接條件

數據組織結構如下圖:

?

?

connect by prior start with


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧洲精品在线观看 | 色婷婷网 | 91看点 | 久久精片 | 97国产精品视频人人做人人爱 | 欧洲男女下面进出的视频 | 国产精品一区二区久久久久 | 久久av二区| 久久国产欧美日韩精品 | 中文字幕a∨在线乱码免费看 | 亚洲免费黄色 | 亚洲色图欧美色 | 午夜影院免费视频 | 伊人狠狠干 | 欧美视频在线看 | 天天插天天插天天插 | 欧美日韩性生活 | 91青青青国产在观免费影视 | 久久com | 亚洲欧洲精品成人久久曰影片 | 91网站链接| 欧美日韩亚洲一区 | 欧美jlzz18性欧美 | 三级成人在线 | 一级毛片 在线播放 | 一区二区三区日韩精品 | 亚洲精品乱码久久久久久花季 | 日韩成人三级 | 国产精品亚洲成在人线 | 免费看污网站 | 亚洲第一页在线观看 | 91精品国产91久久久久久 | 日本在线视 | 国产精品19禁在线观看2021 | 五月天婷五月天综合网站 | 中文字幕精品一区二区三区精品 | 2022国产91精品久久久久久 | 精品一区二区三区18 | 青草香蕉精品视频在线观看 | 天天做天天爱夜夜大爽完整 | 久久艹免费视频 |