gpt4 book ai didi

sql - 层级 ID : Get all descendants for a list of parents — Not Working

转载 作者:行者123 更新时间:2023-12-04 18:47:53 25 4
gpt4 key购买 nike

我正在处理这个线程: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

enter image description here

但是,该查询对于 ID 列表不是很有用。因此,对于列表,我正在尝试在上面链接的线程中找到答案:
SELECT 
child.*
FROM
@Ph as parent
INNER JOIN @Ph as child on child.ProductHierarchyNode.IsDescendantOf(parent.ProductHierarchyNode) = 1
WHERE
parent.ProductHierarchyId in (4)

我确定我忽略了一些明显的东西。只是不确定它是什么。但这只会返回父项而没有子项。

enter image description here

无法发现我的错误。

最佳答案

我觉得你有这个倒退......你想要 DESCENDENTS,但你要求 parent 是 4 的东西......没有任何东西有 4 的 parent 。

你真的不想要这个吗?

SELECT 
child.*
FROM
@Ph as parent
INNER JOIN @Ph as child on child.ProductHierarchyNode.IsDescendantOf(parent.ProductHierarchyNode) = 1
WHERE
parent.ProductHierarchyId in (1)

这将返回您说您期望的所有行,并且对我来说更有意义,因为您要求 1(根父级)的所有后代。 2 是 1 的 child /后代,3 是 2 的 child /后代,4 是 3 的 child /后代。

“WHERE parent.ProductHierarchyId IN (1)”是说“找到所有 1 是父/祖先的节点”。

在第一个查询中,您要求 4 是后代的所有节点,所以这是有道理的。

在第二个查询中,您要查询 1 的所有后代。如果您想要“4 的所有祖先”,那将是一个不同的查询。

关于sql - 层级 ID : Get all descendants for a list of parents — Not Working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com