私がこの結果セット構造を持っていることを考えると(余分なフィールドは取り除かれています)
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 */
これを行うことを考えることができる唯一の方法は、この記事に従うことです-
ネストされたセットを使用して階層のパフォーマンスを向上させる
[LeftExtent]
および[RightExtent]
各レコードに対してフィールドを含めます。この記事の SQLIds
は一意の場合は正常に機能しますが、この特定のツリー構造では、同じレコードが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] の値を指定できるようにするには、どうすればこれを変更できますか? または、必要な順序で結果セットを返す簡単な方法が完全にありませんか?