目录
环境
系统平台:N/A
版本:4.7.7
详细信息
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的数据
结果如下:
三、瀚高数据库写法
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;
结果如下:
更多详细信息请登录【瀚高技术支持平台】 查看