DB2遞歸查詢

          db2中的遞歸查詢使用with來實現,也稱為公共表達式,公共表達式在select語句的開始部分采用with子句的形式,在使用公共表達式的查詢中可以多次使用它,并且公共表達式還可以通過取別名來連接到他本身,這樣的話就可以達到循環的目的。
          遞歸查詢通常有3個部分需要定義:
          一:一個公共表達式形式的虛擬表。
          二:一個初始化表。
          三:一個與虛擬表進行完全內連接的輔助表。
          需要使用UNION all合并上邊3個查詢,然后用select從遞歸輸出中得到最終的結果。
          大體上如下形式
          with XX(x1,x2,x3) as? -------@0
          (
          ?select a.s,a.s1 from a? ----@1
          ?union all? ----@2
          ?select * from a,xx where a.s=xx.x1 ------@3
          )
          select ... from xx where .... -------@4
          @0:為with體,即虛擬表
          @1:為初始化表,這里需要定義初始化的一些行,也就是你遞歸的出發點,或者說父行,這部分邏輯只執行一次,它的結果作為虛擬表遞歸的初始化內容。
          @2:這里必須用UNION all
          @3:這里需要定義遞歸的條件(輔助表),這里定義遞歸的邏輯,需要注意的是父行和子行進行連接的時候邏輯一定要清楚父子關系,不然很容易變成死循環的,這里首先將初始化表的結果作為條件進行查詢,在把執行的結果添加到虛擬表中,只要這里能查詢出來記錄,那么就會進行下一步遞歸循環。
          @4:這里就是對虛擬表的查詢語句。

          例子:
          WITH ROOT AS
          (
          ?SELECT a.id, a.areaname
          ?FROM AREATB a
          ?WHERE a.id = #id#
          ?UNION ALL
          ?SELECT a.id, a.areaname
          ?FROM AREATB a, ROOT r
          ?WHERE a.id = r.id
          )

          SELECT id, areaname
          FROM ROOT

          posted on 2010-07-30 16:36 飛熊 閱讀(818) 評論(0)  編輯  收藏 所屬分類: DataBase


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


          網站導航:
           
          <2010年7月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 扶绥县| 临澧县| 无锡市| 海门市| 夹江县| 乡宁县| 庄河市| 浮山县| 宜丰县| 科技| 汝阳县| 买车| 清水河县| 新邵县| 都安| 双牌县| 河津市| 西乌珠穆沁旗| 和政县| 甘孜县| 明溪县| 乐陵市| 济南市| 温泉县| 平利县| 通城县| 鸡东县| 漳浦县| 南昌市| 即墨市| 镇巴县| 镇江市| 固原市| 凤山县| 荣昌县| 延川县| 安陆市| 惠东县| 潮安县| 麻城市| 建始县|