我有下面的样本数据。
IF OBJECT_ID('tempdb..#tempData1') IS NOT NULL
DROP TABLE #tempData1
CREATE TABLE #tempData1
(
ParentItemId varchar(20),
ChildItemId varchar(20)
)
INSERT INTO #tempData1 VALUES('2000-194-819','2000-212-595')
INSERT INTO #tempData1 VALUES('2000-212-771','2000-212-704')
INSERT INTO #tempData1 VALUES('2000-212-704','2000-212-705')
INSERT INTO #tempData1 VALUES('2000-212-595','2000-211-801')
INSERT INTO #tempData1 VALUES('2000-212-801','2000-211-578')
我想找到 ParentItemId
以及它的孩子们
WHERE ParentItemId = '2000-194-819'
我写了这个问题:
SELECT B1.ParentItemID
FROM #tempData1 B1
WHERE NOT EXISTS (SELECT B2.ParentItemID
FROM #tempData1 B2
WHERE B2.ParentItemID = B2.ChildItemId)
AND ParentItemID = '2000-194-819'
电流输出:
'2000-194-819'
预期产量:
2000-194-819
2000-212-595
2000-212-801
请帮忙。
1条答案
按热度按时间k97glaaz1#
可以使用递归cte。例如:
递归cte由两部分组成:
cte的第一部分(锚定成员)位于
UNION ALL
子句并检索第一组行;这是出发点:cte的第二部分(递归成员)放在
UNION ALL
条款。此部分对检索到的新行迭代执行,直到不再返回任何行为止。这样你就可以像我们在这里做的那样,走一个图。