【发布时间】:2011-03-14 19:00:38
【问题描述】:
我正在 Postgres 中执行递归查询以检索电子邮件列表及其线程子项,如下所示:
WITH RECURSIVE cte (id, title, path, parent_id, depth) AS (
SELECT id,
title,
array[id] AS path,
parent_id,
1 AS depth
FROM emails
WHERE parent_id IS NULL
UNION ALL
SELECT emails.id,
emails.title,
cte.path || emails.id,
emails.parent_id,
cte.depth + 1 AS depth
FROM emails
JOIN cte ON emails.parent_id = cte.id
)
SELECT id, title, path, parent_id, depth FROM cte
ORDER BY path;
在查找子电子邮件之前如何更改列表的顺序(例如按标题排序)。我显然需要保留外部 ORDER BY 以便按树顺序检索列表,并且 Postgres 不会让我在 UNION ALL 之前插入 ORDER BY 子句。
谢谢,
【问题讨论】:
标签: sql postgresql recursion