PostgreSQL递归查询(从子到父、从父到子)
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 |
结语
- sql中WITH xxxx AS () 是对一个查询子句做别名,同时数据库会对该子句生成临时表;
- WITH RECURSIVE 则是一个递归的查询子句,他会把查询出来的结果再次代入到查询子句中继续查询
PostgreSQL递归查询(从子到父、从父到子)相关推荐
- SqlServer中递归查询父节点及其所属子节点
SqlServer中递归查询父节点及其所属子节点 需求场景 SQL脚本实现-根据子节点查询所有的父节点 查询结果 SQL脚本实现-根据父节点查询所有的子节点 查询结果 需求场景 递归查询父节点及其所属 ...
- Oracle递归查询(查询当前记录所有父级或子级)
Oracle递归查询(查询当前记录所有父级或子级) 向上递归查询 所有上级 元数据: 1 2 3 4 SELECT * FROM ORGANIZE START WITH PARENT_ID = '14 ...
- PostgreSQL递归查询父节点
MySQL.PostgreSQL递归查询父节点 id parent_id name 1 null 生产部门 2 null 质量部门 3 null 管理部门 4 null 生产部门 5 null 研发部 ...
- VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值父组件传递给子组件
需求:VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值由父组件动态传给子组件. 效果图: 实现步骤: 1.创建一个子组件 Toptips.vue (它就是公共提示组件), optips.vue代 ...
- WPF查找子控件和父控件方法
原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...
- php 元素添加子元素,css,html_怎么在添加的子元素上继承父元素上已存在的子元素的属性?,css,html,javascript - phpStudy...
怎么在添加的子元素上继承父元素上已存在的子元素的属性? 请问如何使添加后的子元素(tr)也能在鼠标经过前后继续保留其存在的子元素上的属性? dom的基础应用 window.οnlοad=functio ...
- HTML中嵌套的子frame如何访问父页面中的函数?
我解决的办法,在父页面写了个函数,然后在frame页面调用父页面的函数,具体代码如下: 父:function a(){} 子frame:window.parent.a(); 问题迎刃而解 https: ...
- zTree中父节点禁用,子节点可以用
参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...
- pyqt 子控件更新父控件ui
可以用信号槽,好像专业点. 也可以直接用变量通信. 子控件更新父控件ui时,重新弹了一个窗口,父控件重新建了一个实例 仔细查原因 是子控件,父控件都有信号槽,相互连接,把关系搞串了,后来删掉一端的信号 ...
最新文章
- “microsoft ace oledb 12.0 未注册”疑云
- delphi指针简单入门
- isinstance函数
- 《机器学习》 周志华学习笔记第三章 线性模型(课后习题)python 实现
- Android单元测试读写文件,xml-如何为android单元测试提供数据文件
- 贺利坚老师汇编课程74笔记:按下esc键改变显示颜色
- Windows下secureCRT、putty使用秘钥登录Linux
- 使用Visual Studio进行单元测试-Part4
- 学习笔记:12864液晶模块的详细使用
- 微信小程序——云开发入门
- 水电站计算机监控作用,计算机监控系统在水电站中的应用
- Arun Murthy谈Apache YARN
- idea 注释格式化之后回到同一行
- windows server 2008r2 更新失败解决方案
- ASP.NET2.0数据操作之母板页和站点导航
- 批处理备份及删除,forfiles命令详解
- 矿物质饲料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Android8.0 HTML5,HTML5 7个最牛的HTML5移动开发框架
- C/C++数据结构——道路建设(最小生成树Prim)
- 學習 React.js:瞭解 Flux,React.js 的架構