我有一个这样的父 ID 列表,100, 110, 120, 130
它是动态的并且可以更改。我想在一组中获取指定父母的所有后代。为了获得一个单亲的孩子,我使用了这样的查询:
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 ...
PS我还发现这样的查询来选择可能有帮助的ID列表:
SELECT * FROM (VALUES (100), (110), (120), (130)) AS Parent(ParentID)
总而言之,我的目标是编写接受父 ID 数组作为参数的查询,并在一个集合中返回它们的所有后代。