亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

connect by prior start with

系統 1781 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小视频 | 亚洲热线99精品视频 | 午夜大片免费男女爽爽影院久久 | 手机看片福利久久 | 日韩国产午夜一区二区三区 | 婷婷 色天使 | 免费一级毛片无毒不卡 | 女bbbxxx毛片视频 | 国产成人综合亚洲 | 九九视频高清视频免费观看 | 99热在这里只有免费精品 | 亚洲日韩成人 | 久久精品一区二区 | 国产精品91视频 | 亚洲日产综合欧美一区二区 | 天天干天天操天天操 | 嫩模一区| 在线观看国产亚洲 | 西西做人爱免费视频 | 国产精品一级毛片不收费 | 欧美日韩1区 | 青青久久99久久99久久999 | xxx中国www免费 | 美女一级免费毛片 | 成人私人影院在线观看网址 | 午夜看毛片 | 久久国产精品岛国搬运工 | 国产福利91 | 中文字幕在线观看亚洲 | 在线色综合 | 奇米影视首页 | 99视频九九精品视频在线观看 | 国产亚洲精品久久综合影院 | 伊人久久综合谁合综合久久 | 香蕉久久ac一区二区三区 | 欧美肥老太婆交 | 国产中文字幕在线免费观看 | 天码毛片一区二区三区入口 | 久久久久爽亚洲精品 | 五月色婷婷六月噜噜 |