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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值