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

          父子表根據id找到所有的子孫id

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

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

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

           以下轉自http://blog.csdn.net/apicescn/archive/2007/02/16/1510922.aspx

            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
          是過濾條件,用于對返回的所有記錄進行過濾。

          PRIORSTART 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 子查詢語句.

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

          主站蜘蛛池模板: 侯马市| 曲周县| 延安市| 石棉县| 福州市| 麻栗坡县| 利辛县| 湖北省| 峡江县| 息烽县| 江达县| 罗甸县| 台江县| 巨鹿县| 平阳县| 根河市| 曲阳县| 桃园县| 台湾省| 安塞县| 崇阳县| 凤山县| 高唐县| 聊城市| 灵武市| 广水市| 津南区| 秭归县| 珲春市| 周至县| 柘城县| 隆化县| 永康市| 罗山县| 若羌县| 神池县| 炎陵县| 黄石市| 阿克陶县| 东宁县| 定陶县|