PostgreSQL 中的递归查询,2种方法:

1、用with decursive

WITH RECURSIVE d AS (SELECT d1.id,d1.parent_id,d1.caption FROM course_types d1 where d1.dr = 0 and d1.id='typeId' union ALL SELECT d2.id,d2.parent_id,d2.caption FROM course_types d2, d WHERE d2.dr = 0 and d2.parent_id = d.id) SELECT * FROM d

其中typeId 是初始id

2、用递归函数

CREATE OR REPLACE FUNCTION query_child_dept_auth(character varying, lv1 integer)
  RETURNS SETOF w_help_dept AS
$BODY$  
DECLARE  
itemid ALIAS FOR $1;  
itemrecord record;  
BEGIN  
    SELECT s.*,lv1 as lv INTO itemrecord FROM depts s  where s.dr = 0 and s.state = 1 and id=itemid order by s.sort,convert_to(s.caption,'gbk');  
    RETURN NEXT itemrecord;  
     IF (select count(1) from depts s where s.dr = 0 and s.state = 1 and s.parent_id=itemrecord.id) >0  THEN  
            for itemrecord in SELECT s.* FROM depts s  where s.dr = 0 and s.state = 1 and s.parent_id=itemrecord.id order by s.sort,convert_to(s.caption,'gbk') LOOP  
                for itemrecord in select * from query_child_dept_auth (itemrecord.id,(lv1+1)) LOOP  
                    RETURN NEXT itemrecord;  
                end LOOP;  
            end LOOP;  
     END IF;  
    RETURN;
END;$BODY$
  LANGUAGE plpgsql VOLATILE

其中w_help_dept是辅助表,表字段和depts一样,且多个lv字段,lv字段用于模拟oracle递归查询中的level树层数

oracle 递归查询

网上资料蛮多,随便找了个http://cpdw.iteye.com/blog/625574

作用:对于查询递归树是个好方法

转载于:https://www.cnblogs.com/xiongjinpeng/archive/2012/05/29/2523780.html

PostgreSQL 中的递归查询 与oracle 的比较相关推荐

  1. Oracle、Postgresql 中round函数的用法说明

    首先我们来说下这个Oracle中的round函数 Oracle round 函数的意思是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果,参数 number 是指需要 ...

  2. postgresql学习_在PostgreSQL中学习这些快速技巧

    postgresql学习 PostgreSQL is one of the most popular open source SQL dialects. One of its main advanta ...

  3. oracle中的递归查询

    一.oracle中的递归查询上下级部门关系 采用的语法为 start with ... connect by ..... = prior .... 我们部门表中存在这样几条记录 id parent_i ...

  4. Postgresql中,计算两个日期月份差值或年月日,实现Oracle中months_between、add_months的效果

    Oracle中存在months_between.add_months函数,用作计算年龄等,例如计算某个人的年龄:岁(age)-月(monthss)-天(days) SELECT rowid,a.fid ...

  5. oracle sql now函数,SQL Server,MySQL,Oracle,PostgreSQL中常用函数用法(1)日

    练习使用Hibernate没有用MySQL数据库,而是用了前不久接触的PostgreSQL,由于不同的数据对于相同的操作有各自的函数,MySQL的date_format(),在PostgreSQL中是 ...

  6. sql oracle 递归查询语句,oracle递归函数 oracle中SQL递归查询

    关于oracle递归调用的自定义函数如何结束 比如存储过程a中有b,b中含a.用return结束判断,执行还是锁表,怎么解决 关于oracle递归调用的自定义函数如何结束 可以调用. C语言最基本的模 ...

  7. PostgreSQL中的数据库实例、模式、用户(角色)、表空间

    2019独角兽企业重金招聘Python工程师标准>>> 本文参考:http://blog.csdn.net/kanon_lgt/article/details/5931522 htt ...

  8. pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)

    与oracle的区别 1.数据类型区别 Oracle PostgresQL 注释 VARCHAR2 VARCHAR(character varying) Long. CLOB TEXT DATE DA ...

  9. 什么是PostgreSQL?跟MySQL、Oracle比强在哪?

    导读:本文主要给大家介绍什么是PostgreSQL数据库.PostgreSQL有哪些强大的功能及其目前的一些应用情况,以便大家对PostgreSQL有一个初步的认识. 作者:唐成 来源:大数据DT(I ...

最新文章

  1. 苹果和Siri的七年之痒:Siri的落寞之路
  2. matlab与python通信_python和matlab之间数据传输方法
  3. 道家遁甲式(又名道家奇门)
  4. POJ 1184 聪明的打字员
  5. 使用postman创建Marketing Cloud的Contact
  6. javascript字典中添加数组_在javascript中合并两个字典数组
  7. 算法(4)-leetcode-explore-learn-数据结构-数组2
  8. python信息安全书籍_信息安全从业者书单推荐
  9. [转载]让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
  10. Android 开发一定要看的15个实战项目
  11. Windows 系统:没有远程桌面授权服务器可以提供许可证
  12. 如何使用python游戏开发模块—pygame?
  13. Android基于在线地图的轨迹跟踪服务
  14. ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据
  15. 19、ADS使用记录之窄带F类功放设计
  16. flash AS3.0实现进度条与播放暂停按钮的同步
  17. MySQL三个表的连接查询
  18. nodejs 结合 wechaty 实现你的微信群聊机器人二(iPad 协议)
  19. matlab 开4次方根,matlab中计算四次方方程a*x^4+b*x+c=0的实数根.
  20. html调用手机NFC,NFC门禁模拟-教你用NFC手机模拟门禁卡

热门文章

  1. 网卡驱动程序之编写虚拟网卡(二)
  2. ORACLE EXP/IMP 说明
  3. 察看linux内存使用情况
  4. python三大结构、顺序结构_Python学习笔记3——三大结构:顺序,分支,循环3
  5. 英语作业介绍一项发明计算机,介绍电脑的发明的英语作文
  6. 移动端布局三种视口_前端基础:必须要知道的移动端适配(4)——视口
  7. Web安全-伪静态网页
  8. linux 查看文件哈希码,使用linux的sha1sum命令查看效验文件哈希值命令
  9. java 封箱_java封箱和拆箱分析
  10. 初学 Ajax(涉及 php)