问题现象
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)