DB2 递归

DB2反向递归拿到所有部门
WITH
    ROOT 
    (
        CODE,
        CUSTOM_CODE,
        FULL_NAME,
        ID,
        NAME,
        PARENT_CODE,
        PY_CODE,
        LEVEL,
        PARENT_NAME) AS (   SELECT
                                A.CODE,
                                A.CUSTOM_CODE,
                                A.FULL_NAME,
                                A.ID,
                                A.NAME,
                                A.PARENT_CODE,
                                A.PY_CODE,
                                A.LEVEL,
                                A.PARENT_NAME 
                            FROM
                                VIEW_INST_DEPART_CLASSIFY_LEVEL A 
                            WHERE
                                A.CODE IN ( SELECT
                                                DISTINCT B.DEPARTMENT_CODE 
                                            FROM
                                                MEDICAL_WORKER B 
                                            WHERE
                                                1=1 AND
                                                B.INST_CODE= '467223275' 
                                )
                            UNION
                                ALL SELECT
                                        A.CODE,
                                        A.CUSTOM_CODE,
                                        A.FULL_NAME,
                                        A.ID,
                                        A.NAME,
                                        A.PARENT_CODE,
                                        A.PY_CODE,
                                        A.LEVEL,
                                        A.PARENT_NAME 
                                    FROM
                                        VIEW_INST_DEPART_CLASSIFY_LEVEL a,
                                        ROOT R
                                    WHERE
                                        A.CODE = R.PARENT_CODE 
        )
SELECT
    DISTINCT CODE,
    CUSTOM_CODE,
    FULL_NAME,
    ID,
    NAME,
    PARENT_CODE,
    PY_CODE,
    LEVEL,
    PARENT_NAME 
FROM
    ROOT
WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是 mla_id 为 任意传进去的参数 的一行或多行。 

第二个 SELECT 语句执行多次。将种子作为输入(JOIN 中的辅助表)传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN 的结果添加(UNION ALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。 

转载于:https://www.cnblogs.com/warrior/articles/2013722.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值