Упорядочивание С РЕКУРСИВНЫМ ЗАПРОСОМ в Пост-ГРЭС

Я выполняю рекурсивный запрос в Пост-ГРЭС для получения списка электронных писем и их потоковых детей следующим образом:

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 так, чтобы список был получен в, он - древовидный порядок, и Пост-ГРЭС не позволит мне вставить пункт ORDER BY перед ОБЪЕДИНЕНИЕМ ВСЕ.

Спасибо,

5
задан robdog 12 July 2010 в 12:36
поделиться

2 ответа

Это не тестировалось, но обычно я могу добавить любой 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;
3
ответ дан 14 December 2019 в 18:55
поделиться

Создайте представление, состоящее из первой части вашего запроса, упорядоченное по названию. Может быть, что-то вроде этого?

      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;

Затем объедините это представление с другим запросом, как вы делали раньше. Думаю, это сработает. Я сейчас на своем нетбуке, поэтому не могу проверить :/

2
ответ дан 14 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: