SQL递归CTE查询(;with xxx as)
2016-05-16 09:24
375 查看
/*查询CTE公司总部下所有的分公司及分部*/
原理(摘自网上)
------------------------------------------------------ ------------------------------------------------------ ----创建表、数据 ------------------------------------------------------ ------------------------------------------------------ --清除tbl_lzw_Dept IF exists(SELECT * from sysobjects where id= OBJECT_ID('tbl_lzw_Dept')) BEGIN DROP TABLE tbl_lzw_Dept END GO CREATE TABLE tbl_lzw_Dept ( DeptID INT IDENTITY(1,1), DeptName varchar(100), ParentID INT ) INSERT INTO tbl_lzw_Dept values('公司总部',0)--DeptID=1 INSERT INTO tbl_lzw_Dept values('广东分公司',1)--DeptID=2 INSERT INTO tbl_lzw_Dept values('浙江分公司',1)--DeptID=3 INSERT INTO tbl_lzw_Dept values('湖南分公司',1)--DeptID=4 INSERT INTO tbl_lzw_Dept values('香港分公司',1)--DeptID=5 INSERT INTO tbl_lzw_Dept values('珠海分部',2) INSERT INTO tbl_lzw_Dept values('广州分部',2) INSERT INTO tbl_lzw_Dept values('深圳分部',2) INSERT INTO tbl_lzw_Dept values('杭州分部',3) INSERT INTO tbl_lzw_Dept values('长沙分部',4) INSERT INTO tbl_lzw_Dept values('株洲分部',4) INSERT INTO tbl_lzw_Dept values('湘潭分部',4) INSERT INTO tbl_lzw_Dept values('尖沙咀分部',5) GO ------------------------------------------------------ ------------------------------------------------------ ----执行查询 ------------------------------------------------------ ------------------------------------------------------ DECLARE @DeptID INT --SET @DeptID=1 --查询总部公司下所有的子公司及分部 --SET @DeptID=2 --查询广东分公司所有分部 SET @DeptID=5 --查询香港分公司所有分部 ;with dtDept as ( select DeptID,DeptName,ParentID,0 AS LevelID from tbl_lzw_Dept WHERE ParentID=@DeptID UNION ALL SELECT a.DeptID,a.DeptName,a.ParentID,(LevelID+1) AS LevelID from tbl_lzw_Dept a INNER JOIN dtDept b ON a.ParentID=b.DeptID ) SELECT * FROM dtDept
原理(摘自网上)
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。 递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。
相关文章推荐
- 转:Centos6.5_x86安装Redis。
- 4.Jedis常用操作
- 初学sql server 2008之触发器
- 3.Jedis连接方式
- mysql日期加减<转>
- xtrabackup2.4 备份Precona5.6数据库,做增量备份与还原
- 2.redis.conf配置文件参数说明
- 1.redis-简介--数据类型
- 在Linux下,用SQlite数据库编写的图书管理系统源代码及错误总结
- SqlServer2008--建立触发器实例
- mysql 5.7.30安装配置方法图文教程
- Redis和Memcached应用场景
- redis之aof持久化
- 数据库的标准化
- 11招教你如何玩转数据库设计
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制
- 详解mysql int类型的长度值问题
- EF Code First学习笔记:数据库创建
- Eclipse连接Oracle数据库时遇到的问题及解决方案
- Linux下php安装Redis扩展