SqlServer with递归查询的使用

1、数据准备
假定有一个表DiGui,有两个字段Id int ParentId int
Id ParentId
4 0
5 0
7 0
2 1
8 5
15 5
9 7
14 11
30 15
23 15
41 18
104 23
42 30
39 30
53 39
67 39
88 39
107 39

2、目的:通过传入ParentId(=5),返回该记录的所有递归数据,即
Id ParentId
8 5
15 5
30 15
23 15
42 30
39 30
53 39
67 39
88 39
107 39

3、Sql语句实现

with temp ( [Id], [parentid])
as
(
select Id, parentid
from DiGui
where [parentid] = 15
union all
select a.Id, a.parentid
from DiGui a
inner join temp on a.[parentid] = temp.[Id]
)
select * from temp

SqlServer with递归查询的使用

时间: 2024-10-25 15:42:45

SqlServer with递归查询的使用的相关文章

SqlServer CTE 递归查询 Oracle递归查询

在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的父节点. 下面分别以Oracle 11g 数据库和MsSql 2008 数据库为例,来实现上述两种类型的递归查询 先建一张表 表名: TAdministrative  字段名称  说明  AdministrativeID  行政编号  AdministrativePID  当前行政级别的上一行政级别

sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系

CREATE PROCEDURE [dbo].[GetGroupInfo] @s_code NVARCHAR(16) = 0 --会员卡号 AS BEGIN declare @p int; --查询唯一性结果 declare @sql nvarchar(1000); --拼接查询sql字串 set @sql='SELECT @p=n_teamlevel FROM t_user_basic WHERE s_code=' +@s_code; exec sp_executesql @sql,N'@p

SqlServer的递归查询 也就是 with cte查询

表结构  表数据 SQL如下 with lmenu as ( select name,id,1 as lv,cast(Name as nvarchar(max)) as name1, cast(ROW_NUMBER()over(order by getdate()) as nvarchar(10)) as orderid from Table2 where Table2.ParentId=0 Union all select a.Name ,a.ID,(b.lv+1) as lv,cast( R

关于Oracle、SqlServer 的sql递归查询

递归查询所有子节点 oracle SELECT * FROM hrmdepartment              START WITH  id=22              CONNECT BY PRIOR id=supdepid sqlserver with result_table as               (                  select a.id,a.lastname,a.managerid from hrmresource a where id=321 

SQLServer 递归查询

--SQLServer 递归查询,主要用于建立树形结构 IF OBJECT_ID('Categories') IS NOT NULL DROP TABLE Categories GO CREATE TABLE Categories ( CategoryID INT, CategoryName VARCHAR(20), ParentID INT ) GO INSERT INTO Categories(CategoryID, CategoryName, ParentID) SELECT 1, 'Bo

sqlserver实现树形结构递归查询(无限极分类)

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from

sqlserver递归查询

--递归查询 with cte as ( select a.ID,a.Text, a.Name,a.PID from Menu a where id='2' union all select k.id,k.Text, k.name,k.pid from Menu k inner join cte c on c.id = k.pid )select * from cte

sqlserver的CTE实现递归查询

--递归查询 IF OBJECT_ID('DiGui','U') IS NOT NULL DROP TABLE DiGui CREATE TABLE DiGui( Id VARCHAR(50), ParentId VARCHAR(50) ) INSERT INTO dbo.DiGui( Id, ParentId ) select '第三层','第一层' union select '第二层','第一层' union select '第四层','第一层' union select '第十层','第二

SqlServer :实现树形结构递归查询(无限极分类)

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作. 一.查询树状结构某节点下的所有子节点 with cte_child(id,areaName,pid,level) as ( --起始条件 select id,areaName,pid,0 as le