项目中有用户组表UserGroup如下:
其中PID表示当前组的上级组
表数据如下:
现在想查询出顶级组[没有上级组叫顶级组]A1组的所有子孙组ID,SQL如下:
-
-
with
-
RTD1 as(
-
select id ,pid from UserGroup
- ),
-
RTD2 as(
-
select * from RTD1 where id=6
-
union all
-
select RTD1.* from RTD2 inner join RTD1
-
on RTD2.id=RTD1.PID
- )
-
select * from RTD2
--查询子节点
with
RTD1 as(
select id ,pid from UserGroup
),
RTD2 as(
select * from RTD1 where id=6
union all
select RTD1.* from RTD2 inner join RTD1
on RTD2.id=RTD1.PID
)
select * from RTD2
查询结果如下:
id pid
----------- -----------
6 NULL
17 6
18 6
20 6
21 20
22 20
23 20
24 20
29 20
25 23
26 23
28 26
27 25
(13 行受影响)
现在想查询出A1-B3-C3-D2组的所有上级组ID,SQL如下:
-
-
with
-
RTU1 as(
-
select id ,pid from UserGroup
- ),
-
RTU2 as(
-
select * from RTU1 where id=26
-
union all
-
select RTU1.* from RTU2 inner join RTU1
-
-
on RTU2.PID=RTU1.ID
- )
-
select * from RTU2
--查询父节点
with
RTU1 as(
select id ,pid from UserGroup
),
RTU2 as(
select * from RTU1 where id=26
union all
select RTU1.* from RTU2 inner join RTU1
--on myT2.id=myT.PID
on RTU2.PID=RTU1.ID
)
select * from RTU2
查询结果如下:
id pid
----------- -----------
26 23
23 20
20 6
6 NULL
(4 行受影响)
==================================================================
--查询某一父节点的所有子节点
with
RTD1 as(
select id,name,fid from ProductType
),
RTD2 as(
select id,name,fid from RTD1 where id=10103
union all
select RTD1.* from RTD2 inner join RTD1
on RTD2.id=RTD1.FID
)
select * from RTD2
--查询某一父节点的所有子节点
with c as (
select * from producTtype where Id =10103
union all
select a.* from producTtype as a
join c on a.fid = c.Id)
select * FROM c
分享到:
相关推荐
在SQL Server 2008中实现递归查询来获取所有上级或下级数据是一项非常实用的技术,尤其是在处理具有层次结构的数据时。本篇将详细解释如何利用Common Table Expressions (CTE)来完成这样的查询,并对提供的示例代码...
而SQL Server 2005引入的CTE(Common Table Expression,公用表表达式)提供了一种更简洁有效的方式,利用递归查询特性来处理层级数据。 CTE提供了一种可以引用自己的查询结果集的方法,它是一个临时命名的结果集,...
《SQL Server 2005 技术内幕:T-SQL查询》这本书是数据库管理员、开发者和学习SQL Server 2005的人员的重要参考资料。它深入探讨了T-SQL(Transact-SQL)在SQL Server 2005中的应用,这是一种用于管理和操作SQL ...
sqlserver递归查询树结构的表的根结点子最里层的子结点
此外,SQL Server 2005还支持通过XML索引来增强对XML数据的查询性能,使得针对XML文档中的局部细节数据进行查询和更新变得更加高效。 文章还指出,与关系型数据相比,将XML数据直接存储在数据库的文本字段中存在...
### SQL Server 2005 中使用 CTE 实现递归 #### 一、CTE 递归原理 在 SQL Server 2005 中,使用公共表表达式(Common Table Expression, CTE)实现递归是一种高效且直观的方式。递归 CTE 通常由两部分构成:定位...
SQL Server 2005中的触发器是一种数据库对象,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为DML(数据操纵语言)事件,触发器则提供了对这些事件的响应...
SQL Server中的递归查询主要通过CTE(公共表表达式)来实现,它是一种非常强大的工具,特别适用于处理层次结构数据。CTE是T-SQL脚本中的临时结果集,可以用于复杂的查询,尤其是需要递归操作的情况。本文将深入探讨...
本文主要介绍了 SQL Server 2005 中公用表表达式(CTE)的递归调用,用于解决树型结构数据的查询问题。CTE 是 SQL Server 2005 中的一种新的查询方式,它可以简化复杂的查询过程。 在本文中,我们使用一个树型结构...
本文件"sqlserver父子层次查询.pdf"主要探讨了如何使用递归公共表表达式(Recursive Common Table Expression, CTE)来解决这类问题。下面将详细解释相关知识点。 1. **递归公共表表达式(Recursive CTE)**: ...
《SQL Server 2005 技术内幕:T-SQL查询源码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中使用的SQL扩展版本,它在标准SQL的基础上增加...
sql查询tree树,使用的是cte 递归!
本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...
SQL Server 2005对T-SQL进行了扩展,添加了新的语法元素和函数,如窗口函数(OVER子句)、公用表表达式(CTE)、递归查询以及WITH关键字。这些功能使得复杂的数据处理和分析变得更加高效。 2. **存储过程和触发器*...
SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...
在SQL中,递归查询是一种强大的工具,常用于处理层级数据,例如组织结构、树形菜单等。在给定的场景中,我们需要根据一个特定的节点ID查询出该节点及其所有子节点,并将这些结果存储在一个临时表中。以下是实现这一...
本文实例讲述了sql server实现递归查询的方法示例。分享给大家供大家参考,具体如下: 有时候面对树结构的数据时需要进行递归查询,网上找了一番,参考了各位大神的文章,发现蛮简单的,当做个小笔记方便以后使用 sql ...
SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...
在《SQL Server 2005 技术内幕》这套电子书中,涵盖了三个核心主题:存储引擎、T-SQL编程以及查询优化,这些都是理解和提升SQL Server性能的关键领域。 1. **存储引擎**: SQL Server 2005的存储引擎是数据库的...