"select *,(select count(*) from tree where parentid = T.id) as children from tree T where rootid = id "查询当前根节点下一层(where rootid = id ) 的记录(select *,) 并把相应记录的子接点数量查询出来( *,(select count(*) from tree where parentid = T.id) as children )
调试欢乐多
然后從表tree中查出rootid=id的所有記錄
相當于rooted=id的記錄加上了一個字段
insert #a values(3,1)insert #a values(4,2)
insert #a values(5,2)
insert #a values(6,2)insert #a values(7,3)select *,(select count(*) from #a where parentid=表别名.id) 子节点数 from #a 表别名
go
drop table #a
tree 為 talbe
insert 表 values(3,1)insert 表 values(4,2)
insert 表 values(5,2)
insert 表 values(6,2)insert 表 values(7,3)select *,(select count(*) from 表 where
父编号=表别名.编号 -----子查询里的父编号=外面的编号 的数量求和) 子节点数 from 表 表别名
go
drop table 表
where parentid = T.id) as children )这种结构符合语法吗?不过确实能执行
Transact-SQL 引用中的语法关系图使用下列规则。规范 用于
大写 Transact-SQL 关键字。
斜体 Transact-SQL 语法中用户提供的参数。
| (竖线) 分隔括号或大括号内的语法项目。只能选择一个项目。
[ ] (方括号) 可选语法项目。不必键入方括号。
{}(大括号) 必选语法项。不要键入大括号。
[ ,...n ] 表示前面的项可重复 n 次。每一项由逗号分隔。
[ ...n ] 表示前面的项可重复 n 次。每一项由空格分隔。
加粗 数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样键入的文本。
<标签> ::= 语法块的名称。此规则用于对可在语句中的多个位置使用的过长语法或语法单元部分进行分组和标记。适合使用语法块的每个位置由括在尖括号内的标签表示:<标签>。
COUNT ( { [ ALL | DISTINCT ] expression ] | * } )
select count(*) from #a where parentid=表别名.id
使用了子查询子查询基础知识
子查询是一个 SELECT 查询,它返回单个值且嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。下例中,一个子查询用作 SELECT 语句中名为 MaxUnitPrice 的列表达式。SELECT Ord.OrderID, Ord.OrderDate,
(SELECT MAX(OrdDet.UnitPrice)
FROM Northwind.dbo.[Order Details] AS OrdDet
WHERE Ord.OrderID = OrdDet.OrderID) AS MaxUnitPrice
FROM Northwind.dbo.Orders AS Ord子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择