<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不可不說(shuō)
    隨心所欲,無(wú)往不利!
    posts - 88,  comments - 92,  trackbacks - 0
    Oracle中Start with...Connect By實(shí)現(xiàn)部門多級(jí)遞歸理解及用法

    其基本語(yǔ)法是:

    select ... from tablename start with cond1
    connect by cond2
    where cond3;

    簡(jiǎn)單說(shuō)來(lái)是將一個(gè)樹(shù)狀結(jié)構(gòu)存儲(chǔ)在一張表里,比如一個(gè)表中存在兩個(gè)字段: id,parentid,那么通過(guò)表示每一條記錄的parent是誰(shuí),就可以形成一個(gè)樹(shù)狀結(jié)構(gòu)。用上述語(yǔ)法的查詢可以取得這棵樹(shù)的所有記錄。
    其中COND1是根結(jié)點(diǎn)的限定語(yǔ)句,當(dāng)然可以放寬限定條件,以取得多個(gè)根結(jié)點(diǎn),實(shí)際就是多棵樹(shù)。
    COND2是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說(shuō)上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄
    COND3是過(guò)濾條件,用于對(duì)返回的所有記錄進(jìn)行過(guò)濾

    例子:
    創(chuàng)建示例表:
    CREATE TABLE TBL_TEST
    (
    ID NUMBER,
    NAME VARCHAR2(100 BYTE),
    PID NUMBER DEFAULT 0
    );

    插入測(cè)試數(shù)據(jù):

    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往樹(shù)末梢遞歸(取所有點(diǎn))

    select * from TBL_TEST
    start with id=1
    connect by prior id = pid

    從末梢往樹(shù)ROOT遞歸(只取根結(jié)點(diǎn),根結(jié)點(diǎn)的根結(jié)點(diǎn)......)

    select * from TBL_TEST
    start with id=5
    connect by prior pid = id
    注:
    prior 寫(xiě)在哪個(gè)字段那邊,那么就用start with 這條記錄的該項(xiàng)值 與 別的記錄的另一個(gè)字段的值去關(guān)聯(lián);
    start with 可以不寫(xiě),默認(rèn)為所有記錄

    例如
    select * from TBL_TEST
    start with id=5
    connect by prior pid = id
    因?yàn)閜id=2 與id=5 在本數(shù)據(jù)表中為同一條數(shù)據(jù), 因此可以理解為:

    select * from TBL_TEST
    start with pid=2
    connect by prior pid = id (個(gè)人認(rèn)為這樣更好理解)

     ****************************************************

    此語(yǔ)句可以直接分層次顯示

    SELECT lpad('|-',(level-1)*4,'|-')||lpad('『',2)||di_name||rpad('』',2)
    di_name,di_id
    FROM t_dictionary_link CONNECT BY PRIOR di_id=di_protypeid
    START WITH di_id=-1
    |-|-『公司架構(gòu)』                      2
    |-|-|-|-『芯碼科技』                  3
    |-|-|-|-|-|-『開(kāi)發(fā)部』                4
    |-|-|-|-|-|-|-|-『JAVA組』           11
    |-|-|-|-|-|-|-|-『.NET組』          102
    |-|-|-|-|-|-『銷售部』              261
    |-|-|-|-|-|-『客服部』    

    對(duì)各階層記錄排序使用
    ORDER SIBLINGS BY ID
    posted on 2010-05-23 23:02 藍(lán)劍 閱讀(1758) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle


    <2010年5月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(6)

    隨筆分類(62)

    隨筆檔案(90)

    文章檔案(9)

    相冊(cè)

    友情鏈接

    搜索

    •  

    積分與排名

    • 積分 - 325175
    • 排名 - 172

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品亚洲人成在线观看| 亚洲精品福利在线观看| 无码囯产精品一区二区免费| 亚洲成a人不卡在线观看| 免费在线黄色网址| 久久永久免费人妻精品下载| 男人天堂2018亚洲男人天堂| 毛茸茸bbw亚洲人| 亚洲一级免费毛片| h视频免费高清在线观看| 亚洲AV无码久久久久网站蜜桃| 亚洲最新黄色网址| 国产一级做a爱免费视频| 久久大香伊焦在人线免费| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲AV日韩精品久久久久久久 | 久久青草免费91线频观看不卡| 亚洲日本乱码卡2卡3卡新区| 国产亚洲精AA在线观看SEE| 免费看www视频| 久久午夜羞羞影院免费观看| 人碰人碰人成人免费视频| 亚洲宅男精品一区在线观看| 亚洲中文字幕无码久久综合网| 成人免费777777| 日韩免费高清大片在线| 成人午夜影视全部免费看| 亚洲综合偷自成人网第页色| 图图资源网亚洲综合网站| 亚洲国产精品自在拍在线播放 | 成人一级免费视频| 亚洲精品久久无码av片俺去也| 亚洲国产精品lv| 亚洲中文字幕无码专区| 天天拍拍天天爽免费视频| 99久久99久久精品免费观看 | 九九视频高清视频免费观看| 亚洲xxxx视频| 亚洲电影在线播放| 亚洲AV无码国产在丝袜线观看| 亚洲综合久久夜AV |