`

SQLSERVER 2005 递归查询 .

阅读更多

项目中有用户组表UserGroup如下:

其中PID表示当前组的上级组

表数据如下:

现在想查询出顶级组[没有上级组叫顶级组]A1组的所有子孙组ID,SQL如下:

  1. --查询子节点   
  2. with   
  3.     RTD1 as(  
  4.         select id ,pid from UserGroup  
  5.     ),  
  6.     RTD2 as(  
  7.         select * from RTD1 where id=6  
  8.         union all  
  9.         select RTD1.* from RTD2 inner join RTD1   
  10.         on RTD2.id=RTD1.PID  
  11.     )  
  12. 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如下:

  1. --查询父节点   
  2. with   
  3.     RTU1 as(  
  4.         select id ,pid from UserGroup  
  5.     ),  
  6.     RTU2 as(  
  7.         select * from RTU1 where id=26  
  8.         union all  
  9.         select RTU1.* from RTU2 inner join RTU1   
  10.         --on myT2.id=myT.PID   
  11.         on RTU2.PID=RTU1.ID  
  12.     )  
  13. 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 递归查询所有上级或下级数据

    在SQL Server 2008中实现递归查询来获取所有上级或下级数据是一项非常实用的技术,尤其是在处理具有层次结构的数据时。本篇将详细解释如何利用Common Table Expressions (CTE)来完成这样的查询,并对提供的示例代码...

    浅谈T-SQL语言之递归查询.pdf

    而SQL Server 2005引入的CTE(Common Table Expression,公用表表达式)提供了一种更简洁有效的方式,利用递归查询特性来处理层级数据。 CTE提供了一种可以引用自己的查询结果集的方法,它是一个临时命名的结果集,...

    SQL.Server.2005.技术内幕.T-SQL查询.pdf

    《SQL Server 2005 技术内幕:T-SQL查询》这本书是数据库管理员、开发者和学习SQL Server 2005的人员的重要参考资料。它深入探讨了T-SQL(Transact-SQL)在SQL Server 2005中的应用,这是一种用于管理和操作SQL ...

    sqlserver中的递归

    sqlserver递归查询树结构的表的根结点子最里层的子结点

    SQL Server 2005与XML.pdf

    此外,SQL Server 2005还支持通过XML索引来增强对XML数据的查询性能,使得针对XML文档中的局部细节数据进行查询和更新变得更加高效。 文章还指出,与关系型数据相比,将XML数据直接存储在数据库的文本字段中存在...

    sqlserver 2005 使用CTE 实现递归

    ### SQL Server 2005 中使用 CTE 实现递归 #### 一、CTE 递归原理 在 SQL Server 2005 中,使用公共表表达式(Common Table Expression, CTE)实现递归是一种高效且直观的方式。递归 CTE 通常由两部分构成:定位...

    16.sql.server.2005.触发器 16.sql.server.2005.触发器

    SQL Server 2005中的触发器是一种数据库对象,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为DML(数据操纵语言)事件,触发器则提供了对这些事件的响应...

    SQL Server CTE 递归查询全解1

    SQL Server中的递归查询主要通过CTE(公共表表达式)来实现,它是一种非常强大的工具,特别适用于处理层次结构数据。CTE是T-SQL脚本中的临时结果集,可以用于复杂的查询,尤其是需要递归操作的情况。本文将深入探讨...

    [sql server]SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用.doc

    本文主要介绍了 SQL Server 2005 中公用表表达式(CTE)的递归调用,用于解决树型结构数据的查询问题。CTE 是 SQL Server 2005 中的一种新的查询方式,它可以简化复杂的查询过程。 在本文中,我们使用一个树型结构...

    sqlserver父子层次查询.pdf

    本文件"sqlserver父子层次查询.pdf"主要探讨了如何使用递归公共表表达式(Recursive Common Table Expression, CTE)来解决这类问题。下面将详细解释相关知识点。 1. **递归公共表表达式(Recursive CTE)**: ...

    sql server 2005 技术内幕t-sql查询源码

    《SQL Server 2005 技术内幕:T-SQL查询源码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中使用的SQL扩展版本,它在标准SQL的基础上增加...

    CTE树形菜单递归查询 .sql

    sql查询tree树,使用的是cte 递归!

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

    sql server 2005脚本

    SQL Server 2005对T-SQL进行了扩展,添加了新的语法元素和函数,如窗口函数(OVER子句)、公用表表达式(CTE)、递归查询以及WITH关键字。这些功能使得复杂的数据处理和分析变得更加高效。 2. **存储过程和触发器*...

    SQL sever 中递归查找子节点和父节点

    SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...

    SQL 递归查询,并将结果集保存在临时表中

    在SQL中,递归查询是一种强大的工具,常用于处理层级数据,例如组织结构、树形菜单等。在给定的场景中,我们需要根据一个特定的节点ID查询出该节点及其所有子节点,并将这些结果存储在一个临时表中。以下是实现这一...

    sql server实现递归查询的方法示例

    本文实例讲述了sql server实现递归查询的方法示例。分享给大家供大家参考,具体如下: 有时候面对树结构的数据时需要进行递归查询,网上找了一番,参考了各位大神的文章,发现蛮简单的,当做个小笔记方便以后使用 sql ...

    SQL Server 2005 Beta 2 Transact-SQL 增强功能

    SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...

    sql server2005 技术内幕 电子书 存储引擎 t-sql编程 查询优化 非扫描

    在《SQL Server 2005 技术内幕》这套电子书中,涵盖了三个核心主题:存储引擎、T-SQL编程以及查询优化,这些都是理解和提升SQL Server性能的关键领域。 1. **存储引擎**: SQL Server 2005的存储引擎是数据库的...

Global site tag (gtag.js) - Google Analytics