`

postgresql之递归查询

阅读更多

在开发中经常会遇到需要递归查询子节点的情况,之前用的是mysql,没有具体的相对应的功能。

 

但在postgresql中有一个强大的with查询语句。

 

WITH提供了一种在更大的SELECT查询中编写子查询的方式。这个通常称为公共表表达式或CTEs的子查询可以认为是定义存在于查询中的临时表。这个特性的一个应用是用于分解复杂查询为简单的部分。

 

递归查询评估

  1. 评估无递归术语。使用UNION(并不是UNION ALL),去除重复的行。包括在递归查询结果中所有剩余的行,并将它们放入临时的工作表

  2. 只要工作表不为空,那么将重复这些步骤:

    1. 评价递归术语,为递归自我参照替换当前工作表内容。 用UNION(并不是UNION ALL),去除重复的行和与以前 结果行重复的行。 包括所有在递归查询结果中剩余的行,并将它们放入一个临时的中间表

    2. 以中间表的内容替换工作表的内容,然后清空中间表。

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
 
1
1
分享到:
评论

相关推荐

    树PostgreSQL的递归查询

    树PostgreSQL的递归查询树PostgreSQL的递归查询树PostgreSQL的递归查询

    数据库设计之递归树查询

    本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...

    PostgreSQL图(graph)的递归查询实例

    在PostgreSQL中,图(graph)的递归查询是一种强大的功能,尤其在处理复杂的数据结构时。本篇将深入探讨如何在PostgreSQL中进行递归查询,以解决涉及图结构的问题。 首先,我们要明白图和树的主要区别。在树形结构中...

    hibernate实现递归查询

    在查询数据库时,递归查询意味着我们查询一个记录,然后根据该记录的某些属性再查询其关联的记录,这个过程可能反复进行,直到满足某个终止条件。 在Hibernate中,我们可以利用HQL(Hibernate Query Language)或 ...

    在PostgreSQL中实现递归查询的教程

    在PostgreSQL中,递归查询是一种强大的功能,用于处理层级数据或者有自引用关系的数据结构。在本教程中,我们将探讨如何在PostgreSQL中实现递归查询,特别是在处理具有层次结构的问题和分类时。 首先,我们要理解...

    SQL-递归查询-基于PostgreSQL数据库表补充完善树形信息

    基于PostgreSQL,用于递归查询表数据。可以基于表数据中的id、pid属性构建完整树并补充层级、层级内顺序等信息。可用于学习关键字WITH和RECURSIVE的组合用法。

    PostgreSQL树形结构的递归查询示例

    PostgreSQL 提供了一种方法来处理这种层级关系,即递归查询。本文将详细探讨如何在 PostgreSQL 中进行树形结构的递归查询,并通过具体的示例代码来展示其实现。 首先,我们需要构建一个简单的树形结构数据表。在这...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    POSTgreSQL同样支持CTE子查询进行递归。这些数据库允许在SQL语句中直接对子查询进行递归调用,符合递归的本质。 然而,在MySQL中,由于不支持CTE,实现递归查询需要转换思路。可以通过将递归转换为迭代的方式,即使...

    POSTGRESQL修炼之道从小工到专家(高清版)1积分

    对于从小工到专家的进阶之路,本书可能会涵盖高级特性,如窗口函数、递归查询、JSON和XML支持,以及并行查询等。 在实际应用中,PostgreSQL的扩展性是其亮点之一。例如,通过使用GIN(Generalized Inverted Indexes...

    postgresql 12、15离线安装包

    PostgreSQL支持标准的SQL,但也有一些自己的扩展,比如窗口函数、递归查询和JSON支持。在实际使用中,你可能需要根据业务需求来选择合适的数据类型、设计表结构,并学习如何编写高效的查询语句。 在安装和使用...

    PostgreSQL12.2中文手册.chm.7z

    2. **SQL语言**:PostgreSQL支持标准SQL,并且扩展了许多高级特性,如窗口函数、递归查询、并行查询等。手册会详细介绍这些SQL语法和使用方法。 3. **数据类型与操作**:PostgreSQL提供多种数据类型,如数值、字符...

    postgresql9.6.zip

    在使用PostgreSQL 9.6时,你可以利用其丰富的功能,如窗口函数、递归公共表表达式、JSONB数据类型和多版本并发控制(MVCC),以构建高效、可靠和可扩展的数据库解决方案。同时,PostgreSQL还拥有活跃的社区支持,...

    postgresql

    3. **查询语言SQL**:PostgreSQL支持标准SQL,同时提供了许多扩展功能,如窗口函数、递归查询和JSON操作。 4. **并发控制**:PostgreSQL采用MVCC(多版本并发控制)来处理多个事务并发访问,确保数据的一致性。 5....

    PostgreSQL帮助文档 html

    5. **查询语言扩展**:PostgreSQL支持窗口函数、Common Table Expressions (CTE)、递归查询和并行查询等高级SQL特性,这些在帮助文档中都有详细阐述。 6. **索引和查询优化**:学习如何创建和管理索引,以提高查询...

    Postgresql 9.5.2-1

    4. **递归查询**:通过WITH语句支持递归查询,可用于处理层次数据。 5. **B-tree索引**:高效的数据索引机制,加速数据检索。 6. **全文搜索**:支持复杂文本搜索,包括模糊匹配和同义词处理。 7. **并行查询**:在...

    PostgreSQL1

    PostgreSQL的SQL语法遵循SQL标准,并扩展了诸如窗口函数、递归查询、物化视图、表继承等高级特性。这些功能使得PostgreSQL在数据分析和复杂的业务逻辑处理中具有强大优势。 安全性是另一个重要方面,PostgreSQL提供...

    postgresql-16.2-1-windows-x64.exe

    5. 强大的查询能力:PostgreSQL 支持SQL标准,并提供丰富的SQL函数和操作符,支持窗口函数、递归查询、并行查询等高级特性。 6. 扩展性:PostgreSQL 允许用户编写自己的函数和存储过程,可以使用多种语言如C、...

    postgreSql软件和注册码

    PostgreSQL支持标准SQL语法,同时还有许多自定义扩展,如窗口函数、递归查询等。通过pgAdmin III或其他类似工具,你可以方便地编写和执行SQL查询,进行数据操作和分析。 最后,PostgreSQL社区非常活跃,提供了丰富...

Global site tag (gtag.js) - Google Analytics