SQL2005 节点查询问题

ybice 2010-06-04 02:30:04
如何用一条SQL语名查询某一结点下所有子结点
例如表 t 字段
id parentid
1 0
2 1
3 1
4 2
5 0
6 5
7 4
我想得到某一结点如 1 下所有子结点 1,2,3,4,7
用一条sql语句能不能实现 不用函数
...全文
53 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybice 2010-06-04
  • 打赏
  • 举报
回复
速度真快
htl258_Tony 2010-06-04
  • 打赏
  • 举报
回复
----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-06-04 14:35:26
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------

--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[parentid] [int])
INSERT INTO [tb]
SELECT '1','0' UNION ALL
SELECT '2','1' UNION ALL
SELECT '3','1' UNION ALL
SELECT '4','2' UNION ALL
SELECT '5','0' UNION ALL
SELECT '6','5' UNION ALL
SELECT '7','4'

--SELECT * FROM [tb]

-->SQL查询如下:
;WITH t AS
(
SELECT *
FROM tb
WHERE id = 1
UNION ALL
SELECT a.*
FROM tb a, t b
WHERE a.parentid = b.id
)
SELECT ID
FROM t
/*
ID
-----------
1
2
3
4
7

(5 行受影响)
*/
--小F-- 2010-06-04
  • 打赏
  • 举报
回复
;with f as
(
select * from tb where id=1
union all
select a.* from tb a, f b where a.parentid=b.id
)
select * from f

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧