单个查询以返回嵌套的层次结构行

时间:2018-07-20 04:26:00

标签: sql hierarchical-data recursive-query

+----+----------+-------+
| Id | ParentId | Value |
+----+----------+-------+
|  1 |        0 | X     |
|  2 |        1 | X     |
|  3 |        1 | X     |
|  4 |        2 | X     |
+----+----------+-------+

我有一个这样的数据库,限制是:

  • 一行将最多是另一行的子项
  • 一行可以有很多子行
  • 可以有更多的嵌套级别

我要执行的查询是使所有行链接到id = 1的行。因此,我需要返回正确层次结构中的所有行。 我想知道是否有单个查询可以帮助我实现这一目标?我知道可以使用循环,但会减慢很多速度。 如果您有更好的结构建议,请告诉我。我不仅限于修改整个数据库。

1 个答案:

答案 0 :(得分:0)

您没有指定要使用的数据库产品,但是以下是ANSI标准SQL(并且受所有现代DBMS支持):

with recursive tree as (
   select id, parentid, value
   from the_table
   where id = 1
   union all
   select ch.id, ch.parentid, ch.value
   from the_table ch
     join tree p on p.id = ch.parentid
)
select * 
from tree;