简单sql查询,高分求助(层次化查询)

ywcyj 2006-07-16 08:10:25
我的表结构(menu表)
id name fatherid
1 a <null>
2 b 1
3 c 2
4 d 1
5 f <null>
6 g 5
7 i 5
8 new 7
9 d 4

查询id=1 的记录及它下层的记录,要求得到结果为
id name fatherid
1 a <null>
2 b 1
3 c 2
4 d 1
9 d 4

...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LouisXIV 2006-07-16
  • 打赏
  • 举报
回复
MSSQL2000对于树型结构查询没有支持,所以只能写函数
ywcyj 2006-07-16
  • 打赏
  • 举报
回复
oracle下 好像可以这样写
SELECT id , name, fatherid
FROM Menu start WITH id = 1 connect BY
prior id = parent_id;

但ms sql下不认识
OracleRoob 2006-07-16
  • 打赏
  • 举报
回复
2005真方便!
zjcxc 2006-07-16
  • 打赏
  • 举报
回复
-- sql 2005就简单多了, 直接用CTE处理

-- 测试数据
CREATE TABLE menu(id int, name varchar(10), fatherid int)
INSERT menu
SELECT 1, 'a', null
UNION ALL SELECT 2, 'b', 1
UNION ALL SELECT 3, 'c', 2
UNION ALL SELECT 4, 'd', 1
UNION ALL SELECT 5, 'f', null
UNION ALL SELECT 6, 'g', 5
UNION ALL SELECT 7, 'i', 5
UNION ALL SELECT 8, 'new', 7
UNION ALL SELECT 9, 'd', 4
GO

--查询处理
DECLARE @id int
SET @id = 1 -- 设置要查询的id
;WITH qry
AS(
SELECT * FROM menu WHERE id = @id
UNION ALL
SELECT A.* FROM menu A, qry B
WHERE A.fatherid = B.id
)
SELECT * FROM qry
GO

-- 删除测试
DROP TABLE menu

-- 结果
id name fatherid
----------- ---------- -----------
1 a NULL
2 b 1
4 d 1
9 d 4
3 c 2

(5 行受影响)
zjcxc 2006-07-16
  • 打赏
  • 举报
回复
-- 测试数据
CREATE TABLE menu(id int, name varchar(10), fatherid int)
INSERT menu
SELECT 1, 'a', null
UNION ALL SELECT 2, 'b', 1
UNION ALL SELECT 3, 'c', 2
UNION ALL SELECT 4, 'd', 1
UNION ALL SELECT 5, 'f', null
UNION ALL SELECT 6, 'g', 5
UNION ALL SELECT 7, 'i', 5
UNION ALL SELECT 8, 'new', 7
UNION ALL SELECT 9, 'd', 4
GO

-- 创建查询处理函数
CREATE FUNCTION dbo.f_cid(@id int)
RETURNS @r TABLE(id int, level int)
AS
BEGIN
DECLARE @l int
SET @l = 0
INSERT @r SELECT id, @l
FROM menu
WHERE id = @id
WHILE @@ROWCOUNT > 0
BEGIN
SET @l = @l + 1
INSERT @r SELECT A.id, @l
FROM menu A, @r B
WHERE A.fatherid = B.id
AND B.level = @l - 1
END
RETURN
END
GO


--调用函数实现查询
SELECT A.*
FROM menu A, dbo.f_cid(1) B
WHERE A.id = B.id
GO

-- 删除测试
DROP TABLE menu
DROP FUNCTION f_cid

-- 结果
id name fatherid
----------- ---------- -----------
1 a NULL
2 b 1
3 c 2
4 d 1
9 d 4

(5 行受影响)
OracleRoob 2006-07-16
  • 打赏
  • 举报
回复
又是树型结构,遍历一下即可。
ywcyj 2006-07-16
  • 打赏
  • 举报
回复
表结构是id name fatherid
下面都是数据
wanttoknow2001 2006-07-16
  • 打赏
  • 举报
回复
什么意思呢? name的值是不是就是a,b,c,d那几个,还是他们只是例子

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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