PostgreSQL,当没有可用的 ORDER BY 选项时反转递归查询

Mat*_*son 3 sql postgresql recursive-query

我有一个递归查询,它采用一个子行并查询可能可用的每个后续父行,并且当前按最子级到最父级的顺序返回结果集:

WITH recursive subdomains AS (
  SELECT id, parent_id, domain FROM domains WHERE id = '42b2af32-21a0-4212-b634-19ec47982e6b'
  UNION
  SELECT d.id, d.parent_id, d.domain FROM domains d 
  INNER JOIN subdomains s ON s.parent_id::text=d.id::text
) SELECT * FROM subdomains
Run Code Online (Sandbox Code Playgroud)

我想对此进行完全相反的操作,以便它将结果从最父项返回到最子项。添加一个递增索引列以便能够对其进行 ORDER BY 是否最有意义?

Gor*_*off 7

在此类查询中包含“深度”列通常很方便:

WITH recursive subdomains AS (
      SELECT id, parent_id, domain, 1 as lev
      FROM domains
      WHERE id = '42b2af32-21a0-4212-b634-19ec47982e6b'
      UNION ALL
      SELECT d.id, d.parent_id, d.domain, s.lev + 1
      FROM domains d INNER JOIN
           subdomains s
           ON s.parent_id::text = d.id::text  -- is type conversion really necessary?
     )
SELECT s.*
FROM subdomains s;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,您可以添加ORDER BY lev DESC到最终查询中。