模拟Oracle中start with ... connect by的level使用方式(APP)

目录

环境

文档用途

详细信息

环境

系统平台:N/A

版本:4.7.7

文档用途

在Oracle的级联查询中,有时候需要只查询到某一个层级的数据的时候,Oracle使用start with...connect by 与伪列level连用来进行条件筛选,由于瀚高数据库中无start with ... connect by 语法,所以我们需要通过改写的方式来实现这种应用场景。

详细信息

Author:Darion

下面,我们就通过改写的方式来模拟下Oracle中这样的应用场景。

一、创建测试表及数据

  CREATE TABLE tab1 (
  id        NUMBER,
  parent_id NUMBER,
  CONSTRAINT tab1_pk PRIMARY KEY (id),
  CONSTRAINT tab1_tab1_fk FOREIGN KEY (parent_id) REFERENCES tab1(id)
); 
 INSERT INTO tab1 VALUES (1, NULL); 
 INSERT INTO tab1 VALUES (2, 1);
 INSERT INTO tab1 VALUES (3, 2);
 INSERT INTO tab1 VALUES (4, 2);
 INSERT INTO tab1 VALUES (5, 4);
 INSERT INTO tab1 VALUES (6, 4); 
 INSERT INTO tab1 VALUES (7, 1);
 INSERT INTO tab1 VALUES (8, 7);
 INSERT INTO tab1 VALUES (9, 1);
 INSERT INTO tab1 VALUES (10, 9); 
 INSERT INTO tab1 VALUES (11, 10); 
 INSERT INTO tab1 VALUES (12, 9);

该创建表语句与测试数据语句在瀚高数据库与Oracle数据库中是通用的,我们首先分别在两个库中创建好测试表及测试数据。

二、Oracle中写法

    select id,parent_id,level from tab1 t1 
        start with t1.parent_id is null  
        connect by prior t1.id = t1.parent_id and level <= 3
        order by id;

    该语句是我们在Oracle中查询到层级3的数据

    结果如下:

    图片.png

三、瀚高数据库写法

    with recursive t1 as ( 
        select 
        t.id,t.parent_id ,
        1 as level
        from tab1 t where t.parent_id is null  
        union 
        select 
        t2.id, t2.parent_id,
        t1.level + 1 as level
        from tab1 t2, t1  
        where t2.parent_id = t1.id
    )select id,parent_id , level  from t1  where level <= 3 
    order by id;

    结果如下:

更多详细信息请登录【瀚高技术支持平台】 查看

发布了399 篇原创文章 · 获赞 108 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/pg_hgdb/article/details/103885350