我有一张表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进行此类过滤以及如何将表格与模型结合起来?这是如何从一定水平显示所有模型结果的快速方法吗?
答案 0 :(得分:4)
我相信这会给你你想要的东西:
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
方法的详细信息,请查看method reference。
答案 1 :(得分:3)
您将要使用CTE:公用表表达式
http://www.4guysfromrolla.com/webtech/071906-1.shtml
在SQL 2005中引入了允许执行分层或递归关系的简单方法。
这非常接近你的例子:
http://www.sqlservercurry.com/2009/06/simple-family-tree-query-using.html