如何使用hierarchyid sql显示所有递归结果

我有一张桌子
categories
 ID | NAME                  | PARENT ID    | POSITION   | LEVEL     | ORDER
 ----------------------------------------------------------------------------
 1  | root                  | -1           | 0x         | 0         | 255
 2  | cars                  | 1            | 0x58       | 1         | 10
 5  | trucks                | 1            | 0x68       | 1         | 10
 13 | city cars             | 2            | 0x5AC0     | 2         | 255
 14 | offroad cars          | 2            | 0x5B40     | 2         | 255
哪里:
 ID int ident 
 NAME nvarchar(255)
 PARENT ID int
 POSITION hierarchyid
 LEVEL hierarchyid GetLevel()
 ORDER tinyint
该表
model
指定了它所属的型号名称和类别。例:
 ID  | NAME      | CATEGORY
 -----------------------------
 1   | Civic     | 13
 2   | Pajero    | 14
 3   | 815       | 5
 4   | Avensis   | 13
哪里:
 ID int ident
 NAME nvarchar(255)
 CATEGORY int link to ID category table
我想要做的是能够显示: 所有模型 - 将递归显示所有模型, 型号
cars
中的型号(包括车辆) 来自城市汽车的模型(或其子项,如果有的话) 如何使用hierarchyid进行此类过滤以及如何将表格与模型结合起来?这是如何从一定水平显示所有模型结果的快速方法吗?     
已邀请:
您将要使用CTE:公用表表达式 http://www.4guysfromrolla.com/webtech/071906-1.shtml 在SQL 2005中引入允许一种简单的方法来执行分层或递归关系。 这非常接近你的例子: http://www.sqlservercurry.com/2009/06/simple-family-tree-query-using.html     
我相信这会给你你想要的东西:
declare @id hierarchyid

select @id = Position from Categories where Name = 'root' -- or 'cars', 'city cars', etc.

select m.* 
from Models m 
    join Categories c on m.Category = c.ID
where c.Position.IsDescendantOf(@id) = 1
有关
IsDescendantOf
方法和其他
hierarchyid
方法的更多信息,请查看方法参考。     

要回复问题请先登录注册