PostgreSQL递归查询(从子到父、从父到子)

  • 字典表结构(dictionary)
  • 字典表数据
  • 开始递归查询
    • 向下递归(从父到子)
    • 向上递归(从子到父)
  • 结语

场景:
数据库中的数据存在父子关系(单继承,每一条记录只有一个父记录). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL语句。
现在数据库有一张dictionary表,用于存放业务相关字典项

字典表结构(dictionary)

id,name,parent_id

字典表数据

id name parentId
1 字典1 NULL
1-1 字典1-1 1
1-2 字典1-2 1
2 字典2 NULL
2-1 字典2-1 2

开始递归查询

向下递归(从父到子)

WITH RECURSIVE dict AS (SELECT *FROM dictionaryWHERE id= '1'union ALLSELECT dictionary.*FROM dictionary,dictWHERE dictionary.parent_id = dict.id
)
SELECT id AS id, name as name, parent_id as parentId
FROM dict
ORDER BY name

查询结果

id name parentId
1 字典1 NULL
1-1 字典1-1 1
1-2 字典1-2 1

向上递归(从子到父)

WITH RECURSIVE dict AS (SELECT *FROM dictionaryWHERE id= '2-1'union ALLSELECT dictionary.*FROM dictionary,dictWHERE dictionary.id = dict.parent_id
)
SELECT id AS id, name as name, parent_id as parentId
FROM dict
ORDER BY name

查询结果

id name parentId
2 字典2 NULL
2-1 字典2-1 2

结语

  1. sql中WITH xxxx AS () 是对一个查询子句做别名,同时数据库会对该子句生成临时表;
  2. WITH RECURSIVE 则是一个递归的查询子句,他会把查询出来的结果再次代入到查询子句中继续查询

PostgreSQL递归查询(从子到父、从父到子)相关推荐

  1. SqlServer中递归查询父节点及其所属子节点

    SqlServer中递归查询父节点及其所属子节点 需求场景 SQL脚本实现-根据子节点查询所有的父节点 查询结果 SQL脚本实现-根据父节点查询所有的子节点 查询结果 需求场景 递归查询父节点及其所属 ...

  2. Oracle递归查询(查询当前记录所有父级或子级)

    Oracle递归查询(查询当前记录所有父级或子级) 向上递归查询 所有上级 元数据: 1 2 3 4 SELECT * FROM ORGANIZE START WITH PARENT_ID = '14 ...

  3. PostgreSQL递归查询父节点

    MySQL.PostgreSQL递归查询父节点 id parent_id name 1 null 生产部门 2 null 质量部门 3 null 管理部门 4 null 生产部门 5 null 研发部 ...

  4. VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值父组件传递给子组件

    需求:VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值由父组件动态传给子组件. 效果图: 实现步骤: 1.创建一个子组件 Toptips.vue (它就是公共提示组件), optips.vue代 ...

  5. WPF查找子控件和父控件方法

    原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...

  6. php 元素添加子元素,css,html_怎么在添加的子元素上继承父元素上已存在的子元素的属性?,css,html,javascript - phpStudy...

    怎么在添加的子元素上继承父元素上已存在的子元素的属性? 请问如何使添加后的子元素(tr)也能在鼠标经过前后继续保留其存在的子元素上的属性? dom的基础应用 window.οnlοad=functio ...

  7. HTML中嵌套的子frame如何访问父页面中的函数?

    我解决的办法,在父页面写了个函数,然后在frame页面调用父页面的函数,具体代码如下: 父:function a(){} 子frame:window.parent.a(); 问题迎刃而解 https: ...

  8. zTree中父节点禁用,子节点可以用

    参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...

  9. pyqt 子控件更新父控件ui

    可以用信号槽,好像专业点. 也可以直接用变量通信. 子控件更新父控件ui时,重新弹了一个窗口,父控件重新建了一个实例 仔细查原因 是子控件,父控件都有信号槽,相互连接,把关系搞串了,后来删掉一端的信号 ...

最新文章

  1. “microsoft ace oledb 12.0 未注册”疑云
  2. delphi指针简单入门
  3. isinstance函数
  4. 《机器学习》 周志华学习笔记第三章 线性模型(课后习题)python 实现
  5. Android单元测试读写文件,xml-如何为android单元测试提供数据文件
  6. 贺利坚老师汇编课程74笔记:按下esc键改变显示颜色
  7. Windows下secureCRT、putty使用秘钥登录Linux
  8. 使用Visual Studio进行单元测试-Part4
  9. 学习笔记:12864液晶模块的详细使用
  10. 微信小程序——云开发入门
  11. 水电站计算机监控作用,计算机监控系统在水电站中的应用
  12. Arun Murthy谈Apache YARN
  13. idea 注释格式化之后回到同一行
  14. windows server 2008r2 更新失败解决方案
  15. ASP.NET2.0数据操作之母板页和站点导航
  16. 批处理备份及删除,forfiles命令详解
  17. 矿物质饲料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Android8.0 HTML5,HTML5 7个最牛的HTML5移动开发框架
  19. C/C++数据结构——道路建设(最小生成树Prim)
  20. 學習 React.js:瞭解 Flux,React.js 的架構

热门文章

  1. 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
  2. MAC上自定义Office word快捷键
  3. 【愚人节小程序】Java Swing的简单使用
  4. 暄桐教练日课·21天《灵飞经》报名啦
  5. 声声慢 - 程序人生(程序员生活的真实写照)
  6. Android App专项测试-压力测试篇
  7. Excel中批量生成标签,批量打印标签。按指定模板批量打印标签
  8. vue本页面跳转不刷新
  9. HUST1005 渊子赛马【枚举】
  10. 难译 | windbg 乐趣之道(下)