我有一个类似于 100, 110, 120, 130
这样的父ID列表,它是动态的,可能会发生变化。我想要在一个集合中获取所有指定父级的后代。为了获取单个父级的子项,我使用了以下查询:
WITH parent AS (
SELECT PersonHierarchyID FROM PersonHierarchy
WHERE PersonID = 100
)
SELECT * FROM PersonHierarchy
WHERE PersonHierarchyID.IsDescendantOf((SELECT * FROM parent)) = 1
不知道如何为多个父元素执行此操作。我的第一次尝试是编写几个联合查询,但我确定应该有更聪明的方法来解决这个问题。
SELECT * FROM PersonHierarchy
WHERE PersonHierarchyID.IsDescendantOf(
(SELECT PersonHierarchyID FROM PersonHierarchy WHERE PersonID = 100)
) = 1
UNION ALL
SELECT * FROM PersonHierarchy
WHERE PersonHierarchyID.IsDescendantOf(
(SELECT PersonHierarchyID FROM PersonHierarchy WHERE PersonID = 110)
) = 1
UNION ALL ...
另外,我还发现了这个查询来选择一系列ID,可能会有所帮助:
SELECT * FROM (VALUES (100), (110), (120), (130)) AS Parent(ParentID)
总之,我的目标是编写查询,接受一个父ID数组作为参数,并返回所有后代在单个集合中。