【发布时间】:2013-12-24 08:48:51
【问题描述】:
这是我的桌子:
parent_id | child_id
--------------
1 | 2
1 | 3
1 | 4
2 | 5
2 | 6
5 | 8
8 | 9
9 | 5
我需要获取父 2 下的所有项目。我发现了一些与此类似的东西,但不知道如何使它适用于我的情况。我不断收到maximum recursion 限制。这是我所拥有的:
WITH CTE AS
(
SELECT gt.[child_id]
FROM [CHSPortal].[dbo].[company_adgroupstoadgroups] gt
WHERE gt.parent_id='2'
UNION ALL
SELECT g.[child_id]
FROM [CHSPortal].[dbo].[company_adgroupstoadgroups] g
INNER JOIN CTE g2 on g.parent_id=g2.child_id
)
select distinct child_id from CTE
期望的结果将是:2,3,4,5,6,8,9。
我需要进行哪些修改才能获得子2 下所有项目的列表。我也希望2(父节点)出现在列表中。任何帮助将不胜感激。
【问题讨论】:
-
我想知道样本数据是不是真实数据?因为据此,您将实现无限递归。 2 下的所有项目 = 5,6。 5以下= 8,8以下= 9, 9以下= 5,然后无限期回到5,8,9。
-
为什么不只使用一个 select 语句并使用 where 子句: where parent_id = 2?您还说您需要父母 2 下的所有项目,然后您需要孩子 2 下的所有项目。你在找什么?
-
@the_pete - 表中的数据表示“树”或其他递归结构,OP 正在寻找 Tree Traversal。当然,这个特定的例子有明显的周期性数据问题。一个简单的
SELECT语句不足以完成此任务 - 此类工作需要特定的语法,因为现有答案正在使用。 -
我会无限循环,但因为这是数据结构的设置方式。但它不会继续添加节点。一旦它回到以前的值,我就不需要它更深了。
标签: sql sql-server database recursion recursive-query