PgSql和Oracle 的递归查询

1、 建表

1.1、 pgsql建表
create table test_recursion (
	id                serial  , 
    parentId      	  int4, 	
    name     		  VARCHAR(32) ,	
    tree_level    	  int4
)
1.2、 oracle建表
create table test_recursion (
	id                NUMBER, 
    parentId      	  NUMBER, 	
    name     		  VARCHAR2(32) ,	
    tree_level    		  NUMBER 
)
##创建序列
CREATE SEQUENCE SEQ_TEST_RECURSION
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1
CACHE 5;

2、添加数据

## 此为pgsql添加数据语句,Oracle省略
insert into test_recursion (parentId, name, tree_level) values ( 0, '中国' , 1)

insert into test_recursion (parentId, name, tree_level) 
values ( 1, '陕西省' , 2), ( 1, '山西省' , 2),( 1, '北京' , 2),( 1, '重庆' , 2),( 1, '四川' , 2);

insert into test_recursion (parentId, name, tree_level) 
values ( 4, '北京市' , 3);

insert into test_recursion (parentId, name, tree_level) 
values ( 2, '西安市' , 3), ( 2, '渭南市' , 3),( 2, '延安市' , 3),( 2, '汉中市' , 3),( 2, '安康市' , 3);

insert into test_recursion (parentId, name, tree_level) 
values ( 7, '东城区' , 4), ( 7, '西城区' , 4),( 7, '朝阳区' , 4),( 7, '海淀区' , 4),( 7, '昌平区' , 4);

insert into test_recursion (parentId, name, tree_level) 
values ( 8, '雁塔区' , 4), ( 8, '碑林区' , 4),(8, '莲湖区' , 4),( 8, '灞桥区' , 4),( 8, '未央区' , 4),( 8, '长安区' , 4);

insert into test_recursion (parentId, name, tree_level) 
values ( 11, '汉台区' , 4), ( 11, '南郑区' , 4);

3、查询表数据

select r.* from test_recursion r

在这里插入图片描述

4、递归查询数据

4.1、pgsql递归查询数据
## 查询表中北京下面的城市以及区
with recursive a as (
	select b.* from test_recursion b where b.name = '北京'
	union  all
	select c.* from test_recursion c inner join a on c.parentId = a.id
)
select * from a

结果集
在这里插入图片描述

## 查询表中雁塔区在哪里
with recursive a as (
	select b.* from test_recursion b where b.name = '雁塔区'
	union  all
	select c.* from test_recursion c inner join a on c.id = a.parentId
)
select * from a

结果集
在这里插入图片描述

4.2、oracle递归查询数据
## 查询表中西安市下面的城市以及区
select b.* 
from test_recursion b 
start with b.name = '西安市'
connect by prior b.id = b.parentId
## 查询表中西安市在哪里
select b.* 
from test_recursion b 
start with b.name = '西安市'
connect by prior b.parentId = b.id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值