我在執行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