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 飛熊 閱讀(821) 評論(0)  編輯  收藏 所屬分類: DataBase

          <2010年7月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 佛教| 安多县| 尚义县| 鄱阳县| 长海县| 六枝特区| 莎车县| 凤山县| 门头沟区| 定远县| 乌鲁木齐县| 和政县| 阳春市| 彰武县| 阿拉善右旗| 石楼县| 交口县| 大丰市| 车致| 山东| 织金县| 德昌县| 隆昌县| 临海市| 左权县| 班戈县| 淮滨县| 女性| 黄石市| 大余县| 文安县| 南丹县| 关岭| 灵宝市| 卓尼县| 灌云县| 安化县| 独山县| 青铜峡市| 闸北区| 杭州市|