sql - 选择同一个表中的链接行
问题描述
我正在创建一个分支对话游戏,并使用一个对话工具输出带有 alink
和 a 的JSONlink_path
将对话连接在一起。我已经在 PostgreSQL 中解析并插入了这个结构。
我想查询行的一个子集,假设从第 1 行开始,然后按照link_path
直到link_path
为空。连续的行可能是乱序的。
例如,在下表中,
- 从第 1 行开始,我发现第 1 行
link_path = b
, - 这给了我第 3 行,我找到了第 3 行
link_path = c
, - 这给了我第 4 行,第 4 行
link_path
是null
,所以我们返回这个集合:[row 1, row 3, row 4]
--
link link_path info
--------------------------
a b asdjh
w y akhaq
b c uiqwd
c isado
y z qwiuu
z nzabo
在 PostgreSQL 中,如何在不创建查询循环的情况下选择这样的行?我的目标是表现。
解决方案
您可以使用递归查询:
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
链接 | 链接路径 | 信息 :--- | :-------- | :---- 一个 | 乙 | asdjh 乙 | c | uiqwd c | 空 | 伊萨多
推荐阅读
- python - 将列表的所有元素分别附加到python中另一个列表的所有元素
- amazon-web-services - 如何在 AWS 控制台中删除 AWSServiceRoleForSupport?
- cmd - 在 Windows 中使用键从 Tcl 调用命令提示符
- c - 为什么 .o 文件在使用 GCC 编译时似乎有一个大小为 0 的 .bss 部分?
- python - 为什么 SQLAlchemy 不添加自动增量?
- java - 使用字符串标记器获取不同行的输入
- tensorflow - 这么快就用完了内存-tensorflow-gpu
- python - Python如何检查列表中的项目是否为浮点数,如果是,将其更改为字符串?
- javascript - 如何在对象数组中获取最大值
- xslt - BizTalk 映射:如何从循环中提取单行,但可能将其扩展到几个目标字段?