【发布时间】:2019-07-12 19:35:05
【问题描述】:
我正在处理这个帖子:HierarchyID: HierarchyID: Get all descendants for a list of parents
我有一个使用 HierarchyID 的表,我需要一个查询,它可以在一个集合中为我提供指定父级的所有后代。
这是我的表格,已填充:
DECLARE @Ph TABLE (ProductHierarchyNode HIERARCHYID, ProductHierarchyId INT)
INSERT INTO @Ph (ProductHierarchyNode, ProductHierarchyId) VALUES
(hierarchyid::Parse('/1/'), 1),
(hierarchyid::Parse('/1/1/'), 2),
(hierarchyid::Parse('/1/1/2/'), 3),
(hierarchyid::Parse('/1/1/2/1/'), 4)
此查询非常适用于 SINGLE id:4。它返回了该项目以及它的所有后代。
SELECT
*
FROM
@Ph
WHERE
(SELECT ProductHierarchyNode FROM @Ph WHERE ProductHierarchyId = 4).IsDescendantOf(ProductHierarchyNode) = 1
但是,该查询对于 ID 列表并不是很有用。因此,对于一个列表,我正在尝试上面链接到的线程中的答案:
SELECT
child.*
FROM
@Ph as parent
INNER JOIN @Ph as child on child.ProductHierarchyNode.IsDescendantOf(parent.ProductHierarchyNode) = 1
WHERE
parent.ProductHierarchyId in (4)
我确定我忽略了一些明显的东西。只是不确定它是什么。但这只会返回父项,没有子项。
无法发现我的错误。
【问题讨论】:
标签: sql sql-server tsql