`

PostgreSQL的递归查询(with recursive)

 
阅读更多
http://my.oschina.net/Kenyon/blog/55137


示例
with RECURSIVE cte as 
	( 
			select a.* from tb_sm_module a where module_id=0
			union all  
			select k.*  from tb_sm_module k inner join cte c on c.module_id = k.parent_id
	)select cte.* from cte;






with RECURSIVE cte as
(
select a.module_id,cast(a.module_name as varchar(100)) from tb_sm_module a where module_id=0  
union all 
select k.module_id,cast(c.module_name||'>'||k.module_name as varchar(100)) as module_name  from tb_sm_module k inner join cte c on c.module_id = k.parent_id
)select module_id,module_name from cte ;



这里有一个疑问,文什么把后面显示的层级名称改成module_id, 但不起到效果?



两个方向的例子
--向下查找
WITH RECURSIVE T AS(
		SELECT * FROM TB_SM_MODULE T1 WHERE MODULE_ID=1 --原始信息
		UNION AL]L
		SELECT T2.* FROM TB_SM_MODULE T2,T --附加信息
		WHERE T2.PARENT_ID = T.MODULE_ID  --附加信息的父亲等原始信息
)SELECT * FROM T


--向上查找
WITH RECURSIVE T AS(
		SELECT * FROM TB_SM_MODULE T1 WHERE MODULE_ID=1053  --原始信息
		UNION ALL
		SELECT T2.* FROM TB_SM_MODULE T2,T   --附加信息
		WHERE T2.MODULE_ID = T.PARENT_ID --原始信息的父亲等于附加信息
)SELECT * FROM T 
  • 大小: 10.8 KB
  • 大小: 22.9 KB
分享到:
评论

相关推荐

    数据库设计之递归树查询

    在支持`WITH RECURSIVE`的数据库(如PostgreSQL、SQL Server)中,递归查询的通用语法如下: ```sql WITH RECURSIVE cte_name AS ( -- 初始化子查询(非递归部分) SELECT column1, column2, ... FROM table_...

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

    递归查询的核心在于`WITH RECURSIVE`语句,它允许我们定义一个递归公共表表达式(CTE)。在这个例子中,我们定义了一个名为`downstream`的CTE,它从指定的起始节点开始,查找所有下级节点。在每次递归时,我们检查新...

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

    在PostgreSQL中,使用`WITH RECURSIVE`关键字来实现递归查询。在本例中,递归部分的目标是获取所有属于起始问题或分类的子问题和子分类: ```sql WITH RECURSIVE first_level_elements AS ( -- 非递归项 (SELECT ...

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

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

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

    在 PostgreSQL 中,没有像 Oracle 那样的 `connect by` 扩展语法,但可以通过使用 `WITH RECURSIVE` 子句来实现递归查询。这是一个用于执行递归查询的关键字,允许在查询中引用查询本身,从而实现层次遍历。 下面是...

    Oracle 11GR2的递归WITH子查询方法

    与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...

    Oracle迁移到PG建议.docx

    * 递归查询:在Oracle中,使用START WITH...CONNECT BY来实现递归查询,而在Postgresql中,使用WITH RECURSIVE来实现递归查询。 * UPDATE语句别名:在Postgresql中,UPDATE语句的SET字段不能有别名,而在Oracle中,...

    PostgreSQL_与_MS_SQLServer比较

    - **MS SQL Server** 使用 `WITH RECURSIVE` 进行递归查询。 - **PostgreSQL** 同样支持使用 `WITH RECURSIVE`。 #### 系统对象名(表名、索引等)大小写敏感性 - **PostgreSQL** 默认对标识符(如表名、列名等)是...

    SQL无限级查询

    对于支持递归查询的数据库系统(如PostgreSQL、SQL Server等),可以使用递归公用表表达式(Recursive Common Table Expression, CTE)来处理无限层级。递归CTE可以定义一个递归规则,然后按照这个规则重复执行,...

    PostgreSQL WITH 子句

    总结起来,`WITH` 子句是 PostgreSQL 提供的一种高级查询构造,它允许我们将复杂查询分解成易于管理的组件,同时支持递归操作和 DML 操作的组合,大大提高了 SQL 查询的灵活性和可读性。在处理大量数据和复杂逻辑时...

    递归函数,称其为self

    在SQL Server和PostgreSQL这两种数据库管理系统中,递归查询是一种强大功能,允许用户在结构化查询语言中实现递归逻辑。例如,当我们需要在层次结构数据中进行深度遍历时,如员工的上下级关系,就可以利用递归查询来...

    树形结构数据库设计

    层次查询使用START WITH和CONNECT BY语句(在Oracle中)或WITH RECURSIVE(在标准SQL及某些支持的数据库如PostgreSQL中)来逐层遍历树。路径枚举则通过存储每个节点的完整路径(例如,通过逗号分隔的父节点ID列表)...

    sql 21日自学通

    第15到21天,将带你探索更高级的SQL特性,如窗口函数(Window Functions)、递归查询(Recursive Queries)和索引(INDEXES)。窗口函数允许你在一组相关的行上执行计算,而递归查询则用于解决层次结构问题。优化...

    java实现无限级分类树形,连接mysql数据库

    这里我们演示递归查询的例子,使用MySQL的WITH RECURSIVE语句: ```sql WITH RECURSIVE tree AS ( SELECT * FROM tree_nodes WHERE parent_id IS NULL UNION ALL SELECT t.* FROM tree_nodes t JOIN tree p ON t...

    SQL袖珍参考手册(第3版)

    - **递归查询**: 使用WITH RECURSIVE子句进行递归查询。 - **正则表达式**: 用于模式匹配的函数。 - **数据选择**: SELECT语句的使用。 - **字符串函数**: 包括字符串操作的各种函数。 - **子查询**: 嵌套查询的应用...

    sql树形数据处理示例(Jet wang 最新整理)

    例如,使用`WITH RECURSIVE`语句(在PostgreSQL、MySQL 8.0+、SQL Server等支持)可以创建一个递归查询,从根节点开始,逐步找出所有子节点。 2. **层次查询**: 层次查询通常用于展示具有层级关系的数据,如组织...

    数据库-表-树节点读取.rar

    例如,使用MySQL的`WITH RECURSIVE`语句或PostgreSQL的`WITH`语句,可以从根节点开始,遍历整棵树,获取所有子节点的信息。 3. **层次查询**:另一种方法是使用层次查询,如Oracle的`CONNECT BY`或SQL Server的`...

    无限级树形菜单(Sql数据库)

    例如,可以使用`WITH RECURSIVE`语句(在支持的SQL版本中,如PostgreSQL、SQL Server 2005及以上)或者使用自连接和JOIN操作(在不支持递归的SQL版本中,如MySQL)。 为了展示无限级树形菜单,我们可以使用编程语言...

Global site tag (gtag.js) - Google Analytics