pg 递归算法_PostgreSQL递归查询_20191212
前言:Ora2pg处理递归查询并不太好使,特别是当递归查询作为子查询存在,且引用外层 表字段时,递归查询在pg里的语法是with recursive,写法不如oracle简洁,下面介绍转换语法:
1. 测试表结构
create table trees
(
id int,
code int,--本节点编号
pcode int,--父节点编号
info text
);
-- 插入测试数据
insert into trees values(1,100,null,'course A');
insert into trees values(2,10010,100,'course A10');
insert into trees values(3,1001010,10010,'course A1010');
insert into trees values(4,1001011,10010,'course A1011');
insert into trees values(5,10011,100,'course A11');
insert into trees values(6,10012,100,'course A12');
insert into trees values(7,200,null,'course B');
insert into trees values(8,300,null,'course C');
2. 查询节点编号10010本级节点下级节点
-- oracle
select *
from trees t
start with t.code = 10010
connect by prior t.code = pcode ;
-- pg
with recursive cte as(
select x.*
from trees x
where x.code = 10010
union all
select y.*
from trees y
join cte c on c.code = y.pcode
)select * from cte;
3. 查询节点编号10010本级节点上级节点
-- oracle
select *
from trees t
start with t.code = 10010
connect by t.code = prior pcode ;
-- pg
with recursive cte as(
select x.*
from trees x
where x.code = 10010
union all
select y.*
from trees y
join cte c on c.pcode = y.code
)select * from cte;
4. connect by level替换
-- oracle
SELECT REGEXP_SUBSTR(nn, '[^,]+', 1, LEVEL) AS AM
FROM insertmp
CONNECT BY LEVEL <= LENGTH(nn)-LENGTH(REPLACE(nn, ','))+1
-- pg
select distinct regexp_split_to_table(nn,',') am from insertmp;
5. 计算300到500之间的偶数平均值
--不使用递归
with cet1 as(
select generate_series(300,500) as a
),cet2 as(
select a from cet1 where a%2=0
)select avg(a) from cet2;
--使用递归
with recursive t(n) as(
values(300)
union all
select n+2 from t where n<500
)select avg(n) from t;
往期回顾
pg 递归算法_PostgreSQL递归查询_20191212相关推荐
- pg 递归算法_PostgreSQL=递归查询
PostgreSQL=>递归查询 距上次博客更新刚好两周,这两周发生了很多,比如:SFTP服务拉取数据,第三方公共平台接口逻辑迁移新框架,新框架(Spring Cloud)上手,公司月报和审计数 ...
- pg 递归算法_PostgreSQL递归查询示例
PostgreSQL提供了WITH语句,允许你构造用于查询的辅助语句.这些语句通常称为公共表表达式或cte.cte类似于只在查询执行期间存在的临时表. 递归查询是指递归CTE的查询.递归查询在很多情况 ...
- pg 递归算法_16. 图的________优先搜索遍历算法是一种递归算法,图的________优先搜索遍历算法需要使用队列。...
[单选题]血小板正常,RC9%;总胆红素34μmol/L,间接胆红素28μmol/L,HbsAg(+),Coombs试验阴性,红细胞渗透脆性增加,最有可能的诊断是( ). [单选题]成人男性贫血的诊断 ...
- pg 定时删除_PostgreSQL的时间函数使用整理
PG的时间函数使用整理如下 1.获取系统时间函数 ~~~ select now(); --2012-05-12 18:51:59.562+08 select current_timestamp; -- ...
- pg数据库json数据类型_PostgreSQL与开发者起舞—让数据库更好服务于开发
写在前面的话:本文内容有对应50分钟视频讲解,有兴趣可以访问PG与开发者共舞. 很多数据库的对比的活动都是基于数据库本身的一些的底层的功能以及纯数据库方面的对比,等等.更多方面数据库是要为应用来服务的 ...
- pg日期转周_PostgreSQL的时间/日期函数使用
PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# selectnow(); now ------------ ...
- pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区
postgresql 时区与时间函数 rudygao 2016-02-03 1951浏览量 简介: --把时间戳转成epoch值 postgres=# select extract(epoch fro ...
- pg多行合并为逗号分隔一行_postgresql 将逗号分隔的字符串转为多行的实例_PostgreSQL_数据库...
-- 将逗号分隔的字符串转为多行 SELECT unnest(string_to_array('4513,4564,555',',')) as a1; -- array转为行 SELECT unnes ...
- pg数据库与MySQL的count函数_postgresql数据库连接数和状态查询操作
查看数据库的当前连接数和状态的几种方式: 只是能看出数据库服务是否正在运行和启动路径 pg_ctl status 统计当前postgresql相关进程数,在大体上可以估算数据库的连接数,非精准,但是目 ...
最新文章
- CGI与Servlet的区别和联系
- linux服务器存放规划,规划适用于 Linux 和 UNIX 服务器的客户端部署
- matlab选择结构
- java 数字信号_数字信号处理理论及C++和Java实现 数字信号处理理论算法与实现...
- Javascript获取类名方法
- java编写简单邮件_Javamail,编写简单的程序发送邮件
- 2016数博会日程安排表
- 原型模式 java 深浅_Java设计模式——原型模式
- Arduino入门笔记(6):温度传感器及感温杯实验
- 【Python入门教程】第70篇 创建文本文件
- java利用反射映射两个不同对象的属性值
- ab测试工具结果分析
- (二十一)美萍酒店管理系统:系统维护_系统设置_房间类型_房间费打折
- HDU6441 Find Integer(2018CCPC网络赛,费马大定理)
- 阿里天池二手车交易价格预测(一)——EDA
- server 08 做DNS和域分离
- 群晖内网穿透(实战)
- vivado [Runs 36-335] DCP is not a valid design checkpoint问题解决方法
- 欧姆龙CP1H+CIF11与3台施耐德ATV12变频器通讯
- Python使用opencc工具进行繁简转换
热门文章
- 如何注入值到Spring bean属性
- javaweb学习总结(十一)——使用Cookie进行会话管理
- 微信开放平台,微信登陆第三方网站 提示redirect_uri 参数错误
- DIV层+CSS实现锁屏
- JAVA如何判断两个字符串是否相等(亲测第二种方式)
- API测试工具SoapUI Postman对比分析
- 总结PHP中DateTime的常用方法
- MySQL唯一索引与主键的区别:主键相当于一本书的页码,索引相当于书的目录
- 计算机网络基础2017年继续教育,2017临沂继续教育《计算机网络基础》试题及答案...
- mysql数据自动备份_每天自动备份MySQL数据库的shell脚本