sqlserver查询树形结构的所有子节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver查询树形结构的所有子节点相关的知识,希望对你有一定的参考价值。

如题一张表
id name pid
----------- ---------- -----------
1 电器 NULL
2 家电 1
3 冰箱 2
4 洗衣机 2
5 电脑 1
6 笔记本 5
7 平板 5
8 组装机 7
9 品牌机 7
--查询电脑的所有子节点
刚刚学数据库,遇到问题不是很懂,这个还只是查询两层,那涉及更多层次怎么办!谢谢
不要粘贴复制啊!我想说的针对我这长表,还有以后扩展到无限分级后,怎么查询所有子节点

用标准sql的with实现递归查询(sql2005以上肯定支持,sql2000不清楚是否支持):

with subqry(id,name,pid) as (
select id,name,pid from test1 where id = 5
union all
select test1.id,test1.name,test1.pid from test1,subqry
where test1.pid = subqry.id
)
select * from subqry;
参考技术A select * from tablename where pid=@pid 参考技术B 1 SET ANSI_NULLS ON
2 GO
3 SET QUOTED_IDENTIFIER ON
4 GO
5
6 CREATE FUNCTION [dbo].[fn_GetSubCasNoTree](@CAS_NO VARCHAR(20))
7 RETURNS @CAS TABLE
8 (
9 CAS_NO VARCHAR(20) COLLATE DATABASE_DEFAULT,这个不加SQL2000会报错。
10 LEVEL INT
11 )
12
13 AS
14 BEGIN
15 DECLARE @LEVEL int
16 SET @LEVEL = 1
17 INSERT INTO @CAS SELECT @CAS_NO , @LEVEL
18 WHILE @@ROWCOUNT > 0
19 BEGIN
20 SET @LEVEL = @LEVEL + 1
21 INSERT INTO @CAS SELECT A.CAS_NO , @LEVEL
22 FROM CASN A , @CAS B
23 WHERE A.UP = B.CAS_NO and B.LEVEL = @LEVEL - 1
24 END
25 RETURN
26 END

sqlserver查询指定树形结构的所有子节点

用标准sql的with实现递归查询(sql2005以上肯定支持,sql2000不清楚是否支持):

with subqry(id,name,pid) as (
  select id,name,pid from test1 where id = 5 --指定id
  union all
  select test1.id,test1.name,test1.pid from test1,subqry where test1.pid = subqry.id
)
select* from subqry;

以上是关于sqlserver查询树形结构的所有子节点的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver查询指定树形结构的所有子节点

在sqlserver中实现树形结构中根、子节点数据的添加、修改

MYSQL 查询树形结构数据,查询某个节点下的所有子节点数据。

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

树形结构根据某节点查询本节点及下属所有子节点的递归实现

MySQL递归查询所有子节点,树形结构查询