DB2遞歸查詢

          db2中的遞歸查詢使用with來(lái)實(shí)現(xiàn),也稱為公共表達(dá)式,公共表達(dá)式在select語(yǔ)句的開始部分采用with子句的形式,在使用公共表達(dá)式的查詢中可以多次使用它,并且公共表達(dá)式還可以通過取別名來(lái)連接到他本身,這樣的話就可以達(dá)到循環(huán)的目的。
          遞歸查詢通常有3個(gè)部分需要定義:
          一:一個(gè)公共表達(dá)式形式的虛擬表。
          二:一個(gè)初始化表。
          三:一個(gè)與虛擬表進(jìn)行完全內(nèi)連接的輔助表。
          需要使用UNION all合并上邊3個(gè)查詢,然后用select從遞歸輸出中得到最終的結(jié)果。
          大體上如下形式
          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:為初始化表,這里需要定義初始化的一些行,也就是你遞歸的出發(fā)點(diǎn),或者說父行,這部分邏輯只執(zhí)行一次,它的結(jié)果作為虛擬表遞歸的初始化內(nèi)容。
          @2:這里必須用UNION all
          @3:這里需要定義遞歸的條件(輔助表),這里定義遞歸的邏輯,需要注意的是父行和子行進(jìn)行連接的時(shí)候邏輯一定要清楚父子關(guān)系,不然很容易變成死循環(huán)的,這里首先將初始化表的結(jié)果作為條件進(jìn)行查詢,在把執(zhí)行的結(jié)果添加到虛擬表中,只要這里能查詢出來(lái)記錄,那么就會(huì)進(jìn)行下一步遞歸循環(huán)。
          @4:這里就是對(duì)虛擬表的查詢語(yǔ)句。

          例子:
          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) 評(píng)論(0)  編輯  收藏 所屬分類: DataBase

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 天峻县| 枞阳县| 宁武县| 碌曲县| 松原市| 山西省| 信宜市| 珠海市| 宣城市| 连平县| 松潘县| 永德县| 芮城县| 板桥市| 万全县| 新宾| 静宁县| 白玉县| 古蔺县| 尉氏县| 长兴县| 吕梁市| 静宁县| 原阳县| 南和县| 荥经县| 石家庄市| 安康市| 泗水县| 札达县| 全椒县| 叙永县| 宁波市| 石屏县| 诏安县| 日照市| 柘城县| 象州县| 麟游县| 从江县| 广安市|