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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理
    在db2和oracle中的對樹的遞歸查詢語句。

    表結(jié)構(gòu):

    create table? MAIN_NODE (

    MLA_ID????? ?????????INTEGER???? not null??????? ,?? //節(jié)點ID

    MLA_ROOTID????????? INTEGER,?? ???????????????????//根節(jié)點ID

    MLA_PARENTID??????? INTEGER,??? ??????????????????//父節(jié)點ID

    MLA_NAME??????????? VARCHAR2(50), ???????????????//節(jié)點名稱

    constraint P_mlaid primary key (MLA_ID) );

    MLA_ID ??MLA_PARENTID ?MLA_ROOTID?? MLA_NAME

    1? ???????? 0??? ??????????? ???0??? ?????????父節(jié)點1?????

    2? ???????? 1??? ??????????? ???0??? ????????(父節(jié)點1/)子節(jié)點1???

    3?????? ??? ?2??? ???????????? ??0?? ?????????(父節(jié)點1/子節(jié)點1/)孫子節(jié)點1

    4? ???????? 0??? ??????????? ???0??? ?????????父節(jié)點2?????

    5? ???????? 4??? ?????????? ????0???? ???????(父節(jié)點2/)子節(jié)點1???

    樹結(jié)構(gòu)直觀圖:

    根節(jié)點(0
    ???? 父節(jié)點11
    ?????????? (父節(jié)點1/)子節(jié)點12?
    ???????????????????? (父節(jié)點1/子節(jié)點1/)孫子節(jié)點13
    ???? 父節(jié)點24
    ?????????? (父節(jié)點2/)子節(jié)點15

    語句要求的功能:實現(xiàn)給出一個父節(jié)點id然后得到該父節(jié)點下的所有子節(jié)點的信息Db2 的查詢語句:

    WITH ?RPL (mla_parentid, mla_id, mla_name) AS

    (

    SELECT ROOT.mla_parentid, ROOT.mla_id, ROOT.mla_name FROM main_node ROOT WHERE ROOT.mla_id = ?

    UNION ?ALL

    SELECT CHILD.mla_parentid, CHILD.mla_id, CHILD.mla_name FROM RPL PARENT, main_node CHILD WHERE PARENT.mla_parentid = CHILD.mla_id

    ?)

    SELECT DISTINCT mla_parentid, mla_id, mla_name FROM RPL ORDER BY mla_parentid, mla_id, mla_name

    讓我們研究這個查詢語句:
    • RPL 作為一個具有以下三列的虛擬表:mla_parentid, mla_idmla_name
    • WITH 子句內(nèi)的第一個 SELECT 語句是初始化表。它只執(zhí)行一次。它的結(jié)果形成虛擬表的初始內(nèi)容以作為遞歸的種子。在上面的示例中,種子是 mla_id 為 任意傳進去的參數(shù) 的一行或多行。
    • 第 二個 SELECT 語句執(zhí)行多次。將種子作為輸入(JOIN 中的輔助表)傳遞給第二個 SELECT 語句以產(chǎn)生下一個行集合。將 JOIN 的結(jié)果添加(UNION ALL)到虛擬表的當前內(nèi)容中,并放回到其中以形成用于下一次傳遞的輸入。只要有行產(chǎn)生,這個過程就會繼續(xù)。
    • 如果期望,虛擬表上最后的 SELECT 允許我們選擇遞歸查詢所產(chǎn)生的所有行或僅部分行。

    Oracle的查詢語句:

    ?? select mla_parentid, mla_id, mla_name from main_node

    start with mla_id=? connect by prior mla_id=mla_parentid

    讓我們研究這個查詢語句:
    • ? 本語句實際上是 start with ...connect by 的用法, start with 后面所跟的就是就是遞歸的種子。在上面的示例中,種子是 mla_id 為 任意傳進去的參數(shù)
    • connect by 后面的"prior"如果缺省:則只能查詢到符合條件的起始行,并不進行遞歸查詢;
    • connect by prior 后面所放的字段是有關(guān)系的,它指明了查詢的方向。如果后面放的是 mla_id=mla_parentid 則表明從本節(jié)點查向葉子節(jié)點;如果后面放的是 mla_parentid = mla_id則表明從根節(jié)點查向本節(jié)點;
    主站蜘蛛池模板: 在线看片韩国免费人成视频| 亚洲AV无码之日韩精品| 亚洲AV永久无码精品一福利| 免费精品国产自产拍观看| 全免费a级毛片免费看| 亚洲精品美女久久久久久久| 在线观看亚洲av每日更新| 国产精品爱啪在线线免费观看| 边摸边吃奶边做爽免费视频99| 亚洲成人在线电影| 国产又大又长又粗又硬的免费视频| a视频在线免费观看| 亚洲日韩精品国产一区二区三区| 亚洲伊人久久大香线蕉综合图片| 妻子5免费完整高清电视| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲一区二区三区国产精品| 国产午夜无码精品免费看| 亚洲国产高清国产拍精品| 亚洲国产高清在线| 亚洲av成人一区二区三区在线观看| 久久精品人成免费| 国产精品极品美女自在线观看免费| 亚洲an日韩专区在线| 亚洲爆乳无码一区二区三区| 欧洲美熟女乱又伦免费视频 | 夫妻免费无码V看片| 久久国产精品一区免费下载| 理论片在线观看免费| 天堂亚洲国产中文在线| 亚洲国产精品婷婷久久| 久久亚洲欧洲国产综合| 日韩一品在线播放视频一品免费| 2021精品国产品免费观看| 免费视频一区二区| 三级黄色在线免费观看| 一级毛片在线免费视频| 久久精品国产亚洲av天美18| 亚洲毛片基地4455ww| 亚洲激情在线视频| 亚洲第一极品精品无码久久|