SQL - 查找树形结构的父节点

10 浏览
0 Comments

SQL - 查找树形结构的父节点

我有一张表,其中parent_id=0表示当前行是主要的父级:

---------------------
class_id | parent_id
---------------------
    10        0
    11        10
    12        11
    13        12

我想要获取主要父级class_id等于10的行。

但是当我使用SELECT语句时,它只返回一行,因为它具有层次结构。

SELECT class_id FROM TABLE WHERE parent_id = 10

0
0 Comments

SQL - 查找树结构的父节点

在处理树状结构的数据时,经常需要查找某个节点的父节点。在SQL中,可以使用递归公用表表达式(recursive CTE)来解决这个问题。下面是一个使用递归CTE查找树结构父节点的示例代码:

with recursive
n as (
  select * from t where class_id = 10
 union all
  select t.*
  from n
  join t on t.parent_id = n.class_id
)
select * from n

在这段代码中,我们使用了一个递归CTE表达式,命名为`n`。首先,我们从表`t`中选择`class_id`等于10的节点作为初始节点。然后,通过`union all`操作和`join`操作,逐级将符合条件的父节点加入到结果集中,直到没有更高级的父节点为止。

通过执行上述代码,我们可以获取到树状结构中节点10的所有父节点信息。

这种方法的优点是能够方便地处理树状结构的数据,并且适用于各种类型的数据库系统。通过递归CTE,我们可以逐级地查找父节点,从而实现查找树结构中任意节点的父节点的功能。

总结起来,通过使用递归CTE,我们可以方便地查找树结构中某个节点的父节点信息。这种方法适用于各种类型的数据库系统,并且能够处理不同层级的树状结构数据。

0