MSSQLSERVER数据库 递归查询例子

摘要:
SqlServer2005版本的Sql如下:例如,表具有id和pId字段。id是主键,pid表示其父节点。表结构和数据:CREATETABLE[aaa]([id][int]NULL,[pid][int]NULL,[name][nchar](10))GOINSERTOaaaaVALUES(1,0,'a')INSERTOAaVALUEs(2,0,'b')INSENTOOaa

SqlServer2005版本的Sql如下:
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:
CREATE TABLE [aaa](
 [id] [int] NULL,
 [pid] [int] NULL,
 [name] [nchar](10)
)
GO
INSERT INTO aaa VALUES(1,0,'a')
INSERT INTO aaa VALUES(2,0,'b')
INSERT INTO aaa VALUES(3,1,'c')
INSERT INTO aaa VALUES(4,1,'d')
INSERT INTO aaa VALUES(5,2,'e')
INSERT INTO aaa VALUES(6,3,'f')
INSERT INTO aaa VALUES(7,3,'g')
INSERT INTO aaa VALUES(8,4,'h')
GO

--下面的Sql是查询出1结点的所有子结点
with my1 as(select * from aaa where id = 1
 union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
select * from my1

--结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1
--自己的理解:首先查找出根结点
--自己的理解:接着进行联合,查找出根结点下面的所有子结点
--自己的理解:接着还是进行联合,查找出最后一个结点下面所有的子结点,再查找出最后一个结点的上一个结点的所有子结点,以此类推下去。
--自己的理解:假设虚拟出my1的表, 我们不停的将查询的结果 往my1的表里装
--自己的理解:当运行到UNION ALL后面的select表后就一直在with my和UNION ALL这两句之间进行来回切换,不会再运行select * from aaa where id = 1这句


--下面的Sql是查询出8结点的所有父结点
with my1 as(select * from aaa where id = 8
 union all select aaa.* from my1, aaa where my1.pid = aaa.id
)
select * from my1;

--下面是递归删除1结点和所有子结点的语句:
with my1 as(select * from aaa where id = 1
   union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
delete from aaa where exists (select id from my1 where my1.id = aaa.id)

原文网址包括了ORALCE的递归查询例子:http://blog.csdn.net/pdn2000/article/details/6674243

免责声明:文章转载自《MSSQLSERVER数据库 递归查询例子》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue 解决jsonp跨域lua 的 os.date os.time下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一些基本的Oracle命令

一些基本的Oracle命令基本命令 连接数据库 C:>SQLPLUS /NOLOG SQL>CONN / AS SYSDBA 1.Oracle 关闭 SQL>SHUTDOWN (ABORT|IMMEDIATE|NORMAL) 2.Oracle 启动 SQL>STARTUP (REMOUNT|MOUNT|OPENT) 3.SQL>...

SQL触发器(1)

在实习过程中涉及到SQL触发器,在校时未学习过触发器的知识,因而进行上网自学整理,以下内容为我对网上资料收集整合,若侵权请联系删除,谢谢。 一、触发器概念  定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。  常见的触发器有三种:分别应用于Insert , Updat...

SQL Server 执行计划缓存

概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之前先要了解一些基础知识,所以文章前面会讲一些概念,学起来会比较枯燥,但是这些基础知识非常重要。 目录 概述 基础概念 怎样缓存执行计划 SQL Server自动删除执行计划 重新编译执行计划 测试 执行计划相关系统视图 手动清空缓存执...

bootstrap-select 多选下拉框使用教程

http://silviomoreto.github.io/bootstrap-select/ 一、使用bootstrap-select组件时,先引用下列文件 最后一个文件defaults-zh_CN.min.js非必需,是组件中文化的时候才需要引用。 <!--Latest compiled and minified CSS --> <...

吉特仓库管理系统-ORM框架的使用

最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一个做的ORM是相当的不错的,第二个也是相当的不错, 至少在表面上看起来是这么一回事。至于具体的用法和实践我没有深入的去测试过,所以也不便发表更多的意见,不过这...

CRL快速开发框架系列教程十三(嵌套查询)

本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框架系列教程四(删除数据) CRL快速开发框架系列教程五(使用缓存) CRL快速开发框架系列教程六(分布式缓存解决方案) CRL快速开发框架系列教程七(使用事...