我在执行Postgres的递归查询检索电子邮件和他们的孩子螺纹的名单如下订购一个与递归查询: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子句。
感谢,
不幸的是没有按没有工作。您的方法允许我在第一个查询中执行ORDER BY,但最后的ORDER BY路径将始终取代它 - 结果是列表本质上是按ID排序的。 – robdog 2010-07-12 13:11:01
嗯,那么我不知道你在问什么......最后的ORDER BY将始终使结果表按路径排序。你需要什么来命令它中间查询?你试图做什么是顺序依赖? – rownage 2010-07-12 13:34:49
我想检索线程邮件列表,维护它们的树结构 - 上面的查询让我做 - 并且能够按标题对顶级项目进行排序。 – robdog 2010-07-12 13:54:36