sqlserver查询树形结构的所有子节点
如题一张表idnamepid--------------------------------1电器NULL2家电13冰箱24洗衣机25电脑16笔记本57平板58组装机79...
如题一张表
id name pid
----------- ---------- -----------
1 电器 NULL
2 家电 1
3 冰箱 2
4 洗衣机 2
5 电脑 1
6 笔记本 5
7 平板 5
8 组装机 7
9 品牌机 7
--查询电脑的所有子节点
刚刚学数据库,遇到问题不是很懂,这个还只是查询两层,那涉及更多层次怎么办!谢谢
不要粘贴复制啊!我想说的针对我这长表,还有以后扩展到无限分级后,怎么查询所有子节点 展开
id name pid
----------- ---------- -----------
1 电器 NULL
2 家电 1
3 冰箱 2
4 洗衣机 2
5 电脑 1
6 笔记本 5
7 平板 5
8 组装机 7
9 品牌机 7
--查询电脑的所有子节点
刚刚学数据库,遇到问题不是很懂,这个还只是查询两层,那涉及更多层次怎么办!谢谢
不要粘贴复制啊!我想说的针对我这长表,还有以后扩展到无限分级后,怎么查询所有子节点 展开
3个回答
展开全部
用标准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;
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;
展开全部
select * from tablename where pid=@pid
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询