[英]Ordering a WITH RECURSIVE query in 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子句。
謝謝,
創建一個由查詢的第一部分組成的視圖,按標題排序。 也許是這樣的?
CREATE VIEW title_Sort AS
SELECT id,
title,
array[id] AS path,
parent_id,
1 AS depth
FROM emails
WHERE parent_id IS NULL
ORDER BY title;
然后UNION ALL使用您之前執行的其他查詢查看。 我認為這會奏效。 在我的上網本上,所以我無法測試:/
這是未經測試的,但通常我可以在聯合之前添加任何ORDER BY,只要有括號...
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
ORDER BY title
)
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.