在开发中经常会遇到需要递归查询子节点的情况,之前用的是mysql,没有具体的相对应的功能。
但在postgresql中有一个强大的with查询语句。
WITH提供了一种在更大的SELECT查询中编写子查询的方式。这个通常称为公共表表达式或CTEs的子查询可以认为是定义存在于查询中的临时表。这个特性的一个应用是用于分解复杂查询为简单的部分。
递归查询评估
-
评估无递归术语。使用UNION(并不是UNION ALL),去除重复的行。包括在递归查询结果中所有剩余的行,并将它们放入临时的工作表。
-
只要工作表不为空,那么将重复这些步骤:
-
评价递归术语,为递归自我参照替换当前工作表内容。 用UNION(并不是UNION ALL),去除重复的行和与以前 结果行重复的行。 包括所有在递归查询结果中剩余的行,并将它们放入一个临时的中间表。
-
以中间表的内容替换工作表的内容,然后清空中间表。
-
Note: 严格的说,该过程是迭代而不是递归,但是RECURSIVE是通过SQL标准委员会选择的术语
可选的RECURSIVE修饰符从仅有的语法便利性到一个完成事情的特性的改变。 使用RECURSIVE,一个WITH查询可以引用它自己的输出。
一个简单的例子就是查询从1加到100的和:
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
当使用递归查询的时候,确保查询的递归部分最终不会返回元组是很重要的,否则查询将会循环下去。
再看个例子:
with recursive cte as (
select * from cn_product_menu where menu_id=123 union all
select b.* from cn_product_menu b inner join cte c on b.parent_id=c.menu_id)
select menu_id from cte;
得出表cn_product_menu中menu_id=123下所有的子(孙)menu_id
相关推荐
树PostgreSQL的递归查询树PostgreSQL的递归查询树PostgreSQL的递归查询
主要给大家介绍了关于PostgreSQL图(graph)的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
主要介绍了在PostgreSQL中实现递归查询的教程,包括在递归查询内排序等方法的介绍,需要的朋友可以参考下
主要给大家介绍了关于PostgreSQL树形结构的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE...
这是带有示例和更多链接的简短文章:http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID = 24 [^]
版本迭代7.2(2002年)支持postgis插件,原来clob大小8kb,限制了存储复杂的字段窗口查询 并行恢复 递归查询异步流式复制(基于redo reco
递归中心社区组合 发现递归者建立的所有东西! Recurse中心社区投资组合是一个网站,专门展示参与者所做的工作。 该集合具有包容性,这意味着较小或凌乱或不完整的项目将受到欢迎,并且它是作者驱动的,这意味着它...
另外,让我们看看他们的语言:我这个星期很高兴能够学会如何在PGSQL8.4中使用递归查询,他们实在太强大了。这就是我这篇文章所真正想要和大家讨论的东西。MySQL让我们可以工作,并且工作的很好,但你只能在引擎的...
使用Spring-boot REST API,PostgreSQL,ReactJS前端和Docker-compose进行测试任务 如何安装项目: 1.通过以下方式将项目带到您的PC $ git clone-递归 2.然后输入项目目录(CustServ) $ cd CustServ 3.通过构建....
使用验证,Django JSON字段和本地PostgreSQL JSON类型约束以编程方式构建JSON模式(递归字段映射)。 1.0.0版Alpha 文档 概述 构建在和之上,具有对构建和验证JSON文档的强大支持。 可用于通过将字段映射到文档或...
存档内重复数据删除器 用于管理现有压缩存档... 图像相似性系统在PostgreSQL(实际上是Cython,但基本上是python)中实现,在现有PostgreSQL服务器之上作为服务器运行。 这是相当饿的内存。 当前,大约1200万个哈希大
角色名称在3.11 Apline Linux上配置PowerDNS 4.2(授权和/或递归)要求与权威服务器的postgresql数据库的连接。 使用alainvanhoof / alpine_postgresql例如在Alpine上的postgresql角色变量pg_db_name:pdns pg_db_...
它仅在PostgreSQL上进行了测试,但是它使用Arel生成SQL,因此它可以与支持递归CTE的任何数据库和适配器一起使用。 actions_as_forest使整个树甚至整个树森林都可以在单个查询中加载。 所有的父母和孩子协会都是预先...
:direct_hit: 递归 Encomendas CRUD Entregadores CRUD DestinatáriosCRUD Entesadoradores podem adicionar nascomandas问题。 快速进餐系统的重要性 Para explorar os outros,clique nos link acima: :...
使用邻接表和递归公用表表达式查询Django模型树。 支持PostgreSQL,sqlite3(3.8.3或更高版本)和MariaDB(10.2.2或更高版本)和MySQL(8.0或更高版本,如果在没有ONLY_FULL_GROUP_BY情况下ONLY_FULL_GROUP_BY )。...
使用--recursive选项克隆项目,以递归方式克隆子模块。 > git clone --recursive git@github.com:miranj/backup.git 使用适当的配置值从config-sample.json创建config.json 。 保护config.json 。 > chmod 600 ...