首页 > 解决方案 > 选择同一个表中的链接行

问题描述

我正在创建一个分支对话游戏,并使用一个对话工具输出带有 alink和 a 的JSONlink_path将对话连接在一起。我已经在 PostgreSQL 中解析并插入了这个结构。

我想查询行的一个子集,假设从第 1 行开始,然后按照link_path直到link_path为空。连续的行可能是乱序的。

例如,在下表中,

--

link     link_path    info
--------------------------
a          b          asdjh
w          y          akhaq
b          c          uiqwd
c                     isado
y          z          qwiuu
z                     nzabo

在 PostgreSQL 中,如何在不创建查询循环的情况下选择这样的行?我的目标是表现。

标签: sqlpostgresqlhierarchical-datarecursive-query

解决方案


您可以使用递归查询:

with recursive cte as (
    select t.* from mytable t where link = 'a'
    union all
    select t.*
    from cte c
    inner join mytable t on t.link = c.link_path
)
select * from cte

DB Fiddle 上的演示

链接 | 链接路径 | 信息
:--- | :-------- | :----
一个 | 乙 | asdjh
乙 | c | uiqwd
c |       | 伊萨多

推荐阅读