GBase 8a
适配迁移
文章

GBase 8a集群with语句包含递归sql改写建议

发表于2025-05-16 17:32:44163次浏览1个评论

问题现象:

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);
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
        4 售后组                    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)

 

评论

登录后才可以发表评论
崔哥发表于 7个月前
不种闲花,池亭畔、几竿修竹。相映带、一泓流水,森寒洁绿。风动仙人鸣佩遂,雨余净女添膏沐。未成林,难望凤来栖,聊医俗。问华胄,名淇澳。寻苗裔,湘江曲。性孤高似柏,阿娇金屋。坐荫从容烦暑退,清心恍惚微香触。历冰霜、不变好风姿,温如玉。