• with 语句包含递归 sql 改写


    问题现象
    with 语句包含递归 sql 改写。
    处理方法
    示例 1
    create table A_ORGAN(id int,name varchar(16),parent int);
    insert into A_ORGAN values(1,' 南大通用 ',0);
    insert into A_ORGAN values(2,' 行销部 ',1); GBase 8a MPP Cluster FAQ FAQ
    文档版本(2021-04-02) 南大通用数据技术股份有限公司
    79
    insert into A_ORGAN values(3,' 专业服务组 ',2);
    insert into A_ORGAN values(4,' 售后组 ',2);
    with rpl(id,name,parent) as
    (select id, name, parent
    from A_ORGAN
    where parent =1
    union all
    select t1.id, t1.name, t1.parent
    from rpl t2, A_ORGAN t1
    where t2.id = t1.parent)
    select * from rpl
    oracle 中执行结果
    SQL> with rpl(id,name,parent) as
    2 (select id, name, parent
    3 from A_ORGAN
    4 where parent =1
    5 union all
    6 select t1.id, t1.name, t1.parent
    7 from rpl t2, A_ORGAN t1
    8 where t2.id = t1.parent)
    9 select * from rpl ;
    ID NAME PARENT
    ---------- ---------------- ----------
    2 行销部 1
    3 专业服务组 2 GBase 8a MPP Cluster FAQ FAQ
    文档版本(2021-04-02) 南大通用数据技术股份有限公司
    80
    4 售后组 2
    SQL>
    示例 2
    GBase 8a 中目前不支持这种复杂的 with 语句,使用 START WITH CONNECT
    BY 改写,由于当前限制只支持复制表,改写如下:
    create table A_ORGAN1(id int,name varchar(16),parent int)replicated;
    SELECT ID
    ,NAME
    ,PARENT
    FROM A_ORGAN1 start WITH PARENT = 1
    connect BY prior ID = PARENT;
    gbase> SELECT ID
    -> ,NAME
    -> ,PARENT
    -> FROM A_ORGAN1 start WITH PARENT = 1
    -> connect BY prior ID = PARENT;
    +------+-----------------+--------+
    | ID | NAME | PARENT |
    +------+-----------------+--------+
    | 2 | 行销部 | 1 |
    | 3 | 专业服务组 | 2 |
    | 4 | 售后组 | 2 |
    +------+-----------------+--------+
    3 rows in set (Elapsed: 00:00:00.00)
  • 相关阅读:
    SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
    el-form-item validator 携带额外的参数
    c++单行注释,多行注释
    进程和线程的区别与联系
    第1章CRM核心业务介绍
    万字长文浅析配置对MySQL服务器的影响
    三维种子点生长算法(以及Python递归深度问题)
    现货白银MACD实战分析例子
    verilog 移位操作符
    Au 入门系列之九:多轨混音
  • 原文地址:https://blog.csdn.net/m0_49291452/article/details/125542861