社区
MS-SQL Server
帖子详情
请问sql server 2005中对一个表进行递归查询用 cte怎么处理?
FEEDOMING
2006-08-15 05:39:00
我看的例子怎么都是对多个表的,
能否从一个表里面进行递归呢?
例如表 tree
id pid text
-- --- ----
1 0 t1
2 0 t2
3 1 t1_1
4 1 t1_2
5 3 t1_1_1
当我选中id =1的时候,如何把id=1下面的所有子节点得到呢?
...全文
219
3
打赏
收藏
请问sql server 2005中对一个表进行递归查询用 cte怎么处理?
我看的例子怎么都是对多个表的, 能否从一个表里面进行递归呢? 例如表 tree id pid text -- --- ---- 1 0 t1 2 0 t2 3 1 t1_1 4 1 t1_2 5 3 t1_1_1 当我选中id =1的时候,如何把id=1下面的所有子节点得到呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
FEEDOMING
2006-08-15
打赏
举报
回复
多谢
i9988
2006-08-15
打赏
举报
回复
学习
子陌红尘
2006-08-15
打赏
举报
回复
USE demo
GO
CREATE TABLE CarParts
(
CarID INT NOT NULL,
Part VARCHAR(15),
SubPart VARCHAR(15),
Qty INT
)
GO
INSERT CarParts VALUES (1, 'Body', 'Door', 4)
INSERT CarParts VALUES (1, 'Body', 'Trunk Lid', 1)
INSERT CarParts VALUES (1, 'Body', 'Car Hood', 1)
INSERT CarParts VALUES (1, 'Door', 'Handle', 1)
INSERT CarParts VALUES (1, 'Door', 'Lock', 1)
INSERT CarParts VALUES (1, 'Door', 'Window', 1)
INSERT CarParts VALUES (1, 'Body', 'Rivets', 1000)
INSERT CarParts VALUES (1, 'Door', 'Rivets', 100)
INSERT CarParts VALUES (1, 'Door', 'Mirror', 1)
GO
SELECT * FROM CarParts
GO
WITH CarPartsCTE(SubPart, Qty)
AS
(
-- 固定成员 (AM):
-- SELECT查询无需参考CarPartsCTE
SELECT SubPart, Qty
FROM CarParts
WHERE Part = 'Body'
UNION ALL
-- 递归成员 (RM):
-- SELECT查询参考CarPartsCTE
SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty
FROM CarPartsCTE
INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part
WHERE CarParts.CarID = 1
)
-- 外部查询
SELECT SubPart, SUM(Qty) AS TotalNUM
FROM CarPartsCTE
GROUP BY SubPart
T-
SQL
递归
本文介绍了在
SQL
Server
2005
及以后版本
中
,如何使用
CTE
(公用
表
表
达式)
进行
递归查询
。通过
一个
树形结构的
表
为例,展示了在没有
CTE
时需要手动
处理
递归循环,而在引入
CTE
后,可以更简洁地找到任意父节点的所有子节点,无需手动判断递归结束条件。同时提醒注意
CTE
默认的递归层次限制及其调整方法。
在
SQL
2005
中
T-
SQL
的增强部分
本文介绍了
SQL
Server
2005
引入的一系列新特性,包括改进的错误
处理
机制、新增的集合操作符Intersect与Except、TOP子句的应用扩展、OUTPUT命令的使用方法、Outer Apply与Cross Apply简化连接操作、公共
表
表
达式(
CTE
)的
递归查询
能力、Pivot和Unpivot用于行列转换、Ranking与Partitioning函数的应用、以及
表
采样的实现方式。
With As和
表
变量(declare)的详细介绍和区别
公用
表
表
达式(
CTE
)是
SQL
Server
2005
引入的一种优化查询的工具,它提高了
SQL
的可读性和维护性。
CTE
可以替代子查询和
表
变量,尤其在
处理
UNION ALL时能提升效率。
CTE
的使用方法包括定义
表
达式名称、AS关键字后的查询定义,并在后续的查询
中
引用。注意,
CTE
必须直接跟随使用它的
SQL
语句,且不能包含ORDER BY、INTO等特定子句。
CTE
可以递归引用自身,也可以引用在同一WITH子句
中
的其他
CTE
,但不能前向引用。
oracle两个
递归查询
,
Sql
语句里的
递归查询
Sql
Server
2005
和Oracle 两个版本
本文介绍了如何使用
SQL
进行
递归查询
,包括查询节点的子节点和父节点,以及在Sales
表
中
计算逐月返利金额的复杂递归计算。示例分别展示了在
SQL
Server
2005
和Oracle数据库
中
的实现方式,涉及
CTE
(公共
表
表
达式)和CONNECT BY子句。文章通过具体案例展示了
SQL
在数据
处理
和计算
中
的强大能力。
SQL
With As 用法
公用
表
表
达式(
CTE
)是
SQL
Server
2005
引入的一种新特性,用于提升
SQL
语句的可读性和性能。
CTE
允许定义
一个
临时结果集,可以在查询
中
多次引用,类似于子查询或
表
变量。本文详细解释了
CTE
的含义、使用方法,并通过实例展示了如何使用
CTE
优化查询,包括递归
CTE
的使用,以及在
处理
大量数据时如何避免性能损失。此外,还强调了使用
CTE
时应注意的几点事项,如不能在
CTE
_query_definition
中
使用某些子句,以及在批
处理
中
的使用规则。
MS-SQL Server
34,876
社区成员
254,639
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章