我有一个名为submissions
的表格,它本质上是一个单向链表。给定某一行的id
,我想返回该行所在的整个链表(并按正确顺序排列)。例如,在下面的表格中,如果有id 2
,我希望以1,2,3,4
的顺序返回相应的行。
(4,3) -> (3,2) -> (2,1) -> (1,null)
我期望在这里看到1,2,3,4,因为4本质上是列表的头部,而2属于该列表,我想遍历整个列表。http://sqlfiddle.com/#!15/c352e/1有没有一种使用postgresql的递归CTE方法来实现这一点? 到目前为止,我只能得到父级,而不能得到子孙。
WITH RECURSIVE "sequence" AS (
SELECT * FROM submissions WHERE "submissions"."id" = 2
UNION ALL SELECT "recursive".* FROM "submissions" "recursive"
INNER JOIN "sequence" ON "recursive"."id" = "sequence"."link_id"
)
SELECT "sequence"."id" FROM "sequence"
2
获取1,2,3,4
吗?如果我们从id=2
开始:(2,1) -> (1,null)
... 看起来你的查询是正确的,但期望结果是错误的。 - undefinedid
。因此,如果我提供了1、2、3或4,我应该得到相同的结果,因为我基本上想要整个行的血统。 - undefined