PostgreSQL递归查询
原料
--创建组织架构表
create table "Org"(
"OrgId" character varying(50) primary key,
"ParentId" character varying(50),
"OrgName" character varying(50)
)
--添加数据
insert into "Org" ("OrgId","ParentId","OrgName") values('',null,'***集团');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司01');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司02');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司03');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司04'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部');
向下递归
--向下递归
with recursive T ("OrgId", "ParentId", "OrgName", "Depth") AS
(
select "OrgId", "ParentId", "OrgName", 1 "Depth" from "Org" where "OrgId"='' --起始节点
union all
select D."OrgId", D."ParentId", D."OrgName", T."Depth" + 1 "Depth" from "Org" D join T on D."ParentId" = T."OrgId"
)
select "OrgId", "ParentId", "OrgName", "Depth" from T
输出结果:

向上递归
--向上递归
with recursive T ("OrgId", "ParentId", "OrgName", "Depth") AS
(
select "OrgId", "ParentId", "OrgName", 1 "Depth" from "Org" where "OrgId"='' --起始节点
union all
select D."OrgId", D."ParentId", D."OrgName", T."Depth" + 1 "Depth" from "Org" D join T on D."OrgId" = T."ParentId"
)
select "OrgId", "ParentId", "OrgName", "Depth" from T
输出结果:

PostgreSQL递归查询的更多相关文章
- PostgreSQL=>递归查询
PostgreSQL=>递归查询 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html 距上次博客更新刚好两周,这两周发生了很多,比如: ...
- PostgreSQL递归查询示例
PostgreSQL提供了WITH语句,允许你构造用于查询的辅助语句.这些语句通常称为公共表表达式或cte.cte类似于只在查询执行期间存在的临时表. 递归查询是指递归CTE的查询.递归查询在很多情况 ...
- PostgreSQL递归查询实现树状结构查询
在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...
- oracle和postgresql 递归查询父子关系记录语法区别
oracle: 一.数据 db数据字段如下: task_id task_name t.parent_task_id *** *** ...
- PostgreSQL 递归查询 (转)
数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL语句 现在 ...
- 对sql作业的总结(PostgreSQL的递归查询)
已知条件如下: CREATE TABLE appointment ( emp_id integer NOT NULL, jobtitle ) NOT NULL, salary ,) NOT NULL, ...
- PostgreSQL中RECURSIVE递归查询使用总结
RECURSIVE 前言 CTE or WITH 在WITH中使用数据修改语句 WITH使用注意事项 RECURSIVE 递归查询的过程 拆解下执行的过程 1.执行非递归部分 2.执行递归部分,如果是 ...
- postgresql 函数&存储过程 ; 递归查询
函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create ...
- PostgreSQL的递归查询(with recursive) ,替代oracle 的级联查询connect by
开发有需求,说需要对一张地区表进行递归查询,Postgres中有个 with recursive的查询方式,可以满足递归查询(一般>=2层). 测试如下: create table tb(id ...
随机推荐
- oracle sqlplus conn 远程连接
- extjs [1]
1.JS 类的声明,和对象的创建 2.原始方法用EXTJS创建一个window 3.利用一个按钮触发window窗体,了解一下EXTJS的事件机制 4.用EXTJS4.0的create来创建windo ...
- MyEclipse 生成APK文件
MyEclipse 生成APK文件 Android Tools>Export Signed Application Packages. http://jingyan.baidu.com/ar ...
- 下拉菜单的实现classList.add() classList.remove() class属性的添加和删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Git 仓库 SSH、HTTP、Gitweb (Nginx) 乱炖
简介: 自己搭建 Git 仓库,实现 SSH 协议.配合 Nginx 实现 HTTP 协议拉取.推送代码. 利用 Nginx 实现 Gitweb 在线浏览代码,使用 Gitweb-theme 更新默认 ...
- Ssm框架常见报错
错误1: The origin server did not find a current representation for the target resource or is not willi ...
- set 续2
--------siwuxie095 用 set 命令进行字符串处理(这个不应只属于 set 的内容,应该归属于格式内容, 在没有 set 的情况下,格式仍旧适用) ...
- sqlserver top 赋值
DECLARE @password2 VARCHAR(30) select top 1 @password2= password from teacher 不要写成 DECLARE @password ...
- 阅读xtrabackup代码的一点笔记
xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(), ...
- zz如何让你的婚姻天长地久?
如果天长地久意味着一列永不出轨的火车,下面有关婚姻生活的战略就像制定一张准确的运行时刻表.因为成功的婚姻并非源于机运,所谓的七年之痒也不是空穴来风.对那些已婚男人来说,他们需要计划——为了一年比一年过 ...