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

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

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

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    父子表根據(jù)id找到所有的子孫id

    Posted on 2007-04-28 19:46 leekiang 閱讀(1648) 評論(0)  編輯  收藏 所屬分類: sql

         有張表,有兩個(gè)字段: id,patentid,他們分別記錄了這條記錄的id,以及父id號,
         如何根據(jù)最頂層的id找到所有的id,包括子id,孫子id,以及重孫id.

    --用遞歸查詢
    SELECT ID, PARENTID FROM tablename 
    Start 
    With ID = 'xxx' 
    Connect 
    By Prior ID = ParentId

     以下轉(zhuǎn)自http://blog.csdn.net/apicescn/archive/2007/02/16/1510922.aspx

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

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

    以上主要是針對上層對下層的順向遞歸查詢而使用start with ... connect by prior ...這種方式,但有時(shí)在需求需要的時(shí)候,可能會(huì)需要由下層向上層的逆向遞歸查詢,此是語句就有所變化:例如要實(shí)現(xiàn) select * from table where id in ('0','01','0101','0203','0304') ;現(xiàn)在想把0304的上一級03給遞歸出來,0203的上一級02給遞歸出來,而01現(xiàn)在已經(jīng)是存在的,最高層為0.而這張table不僅僅這些數(shù)據(jù),但我現(xiàn)在只需要('0','01','0101','0203','0304','02','03')這些數(shù)據(jù),此時(shí)語句可以這樣寫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 子查詢語句.

    http://topic.csdn.net/t/20050319/17/3864428.html
         http://blog.csdn.net/Bogues/archive/2005/10/28/518590.aspx


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲阿v天堂在线2017免费| 国产精品永久免费| 亚洲不卡在线观看| 亚洲a∨无码男人的天堂| 久久久亚洲欧洲日产国码是AV| 亚洲Av永久无码精品三区在线 | 国产一二三四区乱码免费| 免费人成网站永久| 日韩在线观看免费完整版视频| 免费无码午夜福利片69| 人人公开免费超级碰碰碰视频| 黄色网址免费在线观看| 精品人妻系列无码人妻免费视频| 99视频在线观看免费| 免费观看久久精彩视频| 日韩免费无码视频一区二区三区 | 日韩欧美亚洲国产精品字幕久久久| 亚洲αⅴ无码乱码在线观看性色| 亚洲欧美成人综合久久久| 日本亚洲中午字幕乱码| 永久免费无码网站在线观看个| 中国内地毛片免费高清| 污视频在线观看免费| 2021国内精品久久久久精免费| 免费观看无遮挡www的视频| 91免费精品国自产拍在线不卡| 全免费一级毛片在线播放| 无码不卡亚洲成?人片| 在线亚洲精品自拍| 亚洲一卡2卡三卡4卡有限公司| 亚洲jjzzjjzz在线观看| 国产成人亚洲精品91专区高清 | 亚洲av日韩av永久无码电影| 少妇亚洲免费精品| 免费国产在线视频| 亚洲黄色免费在线观看| 午夜在线亚洲男人午在线| 久久亚洲国产欧洲精品一| 久久国产亚洲高清观看| 亚洲人成色在线观看| 国产精品永久免费|