【发布时间】:2012-04-26 06:26:09
【问题描述】:
我有一个包含以下列的表:group_id、parent_id、name
在此表中,parent_id 是另一条记录的 group_id。父母与孩子之间存在一对多的关系。这形成了一个层次结构,其中只有一个顶级组的 parent_id 为 NULL。可以有任意数量的深度,但实际上我的层次结构永远不会超过 20 层。
我想检索具有给定 group_id 的组的每个祖先(父母的父母等)。我担心返回的特定方式。
我正在使用 MS SQL 2005,但我也对使用其他 RDBMS 的解决方案感兴趣。
我发现了一些类似的问题,但它们似乎都分解为递归、循环或嵌套集。我不能使用嵌套集,因为我不能改变数据结构。我想尽可能避免递归或循环,或者至少了解为什么不可能。
这是我在研究时发现的一些问题:
【问题讨论】:
-
你唯一的目标是为每个id获取最上层的顶级parent_id?
-
您发布的第一个链接将使用递归公用表表达式 (
with ...) 解决您的问题,这也适用于大多数现代 DBMS(稍作语法更改) -
@a_horse_with_no_name:这就是我的目标。看起来微不足道。
-
@wildplasser 让我澄清一下“我想检索每个父母”,就像该组的每个父母一样,包括中间的每个父母,直到您到达顶部。您可以通过以下方式轻松到达最顶层: Select * from table where parent_id is null;
-
你应该说你也想避免 implicit 递归(因为 SQL 本身不是递归的,只是它的执行)。但是你为什么要避免这种情况呢? CTE 可能是解决此问题的最有效方法。
标签: sql parent-child