既然我有这个结果集的结构(多余领域已剥离)SQL服务器树层次结构,并与重复记录ID嵌套集合
Id | ParentId | Name | Depth
----------------------------
是有可能有记录在树的顺序返回即Parent
然后Children
,如果Child
是Parent
,那么他们的Children
,如果不是那么Sibling
等?例如,
Id | ParentId | Name | Depth
----------------------------
1 NULL Major 1
2 1 Minor 2
3 1 Minor 2
4 3 Build 3
5 3 Build 3
6 1 Minor 2
/* etc, etc */
,我能想到这样做的唯一方法是按照本文 -
Improve hierarchy performance using nested sets
,包括对每个记录[LeftExtent]
和[RightExtent]
领域。现在,当Ids
是唯一的时候,文章中的SQL可以正常工作,但在这个特定的树结构中,具有相同Id
的记录可以出现在树中的不同位置(显然,ParentId
字段不同)。我认为这个问题是从文章这个SQL -
INSERT INTO @tmpStack
(
EmployeeID,
LeftExtent
)
SELECT TOP 1 EmployeeID, @counter
FROM Employee
WHERE ISNULL(ParentID, 0) = ISNULL(@parentid,0)
/* If the Id has already been added then record is not given [LeftExtent] or [RightExtent] values. */
AND EmployeeID NOT IN (SELECT EmployeeID FROM @tmpStack)
这怎么可能改变,以允许给具有重复Ids
记录[LeftExtent]和[RightExtent]值,或我完全缺少一个更简单的方法以我需要的顺序返回结果集?
结果集的测试表明这个效果很好:) – 2009-07-14 15:10:30
好吧,让我知道如果你注意到任何奇怪的东西,我已经使用了一段时间! – ScottE 2009-07-14 16:56:05