如何反转此查询的结果



我使用Firebird 2.1。有一个名为Folders的表,包含以下字段:

FolderID
ParentFolderID
FolderName

ParentFolderID是-1,如果它是根文件夹,否则它包含父文件夹的ID。

下面的递归查询将按顺序返回文件夹的父目录:

WITH RECURSIVE hierarchy (folderid, ParentFolderId, FolderName) as (
   SELECT folderid, ParentFolderId, FolderName
   FROM folders
   WHERE folderid = :folderid
   UNION ALL
   SELECT folderid, ParentFolderId, FolderName
   FROM folders f
     JOIN hierarchy p ON p.parentFolderID = f.folderID
)
SELECT List(FolerName, '  ') FROM hierarchy

结果类似于:

Child Parent Parent's Parent

我如何反转上面查询的结果得到:

父母的父母父母孩子?

谢谢!

LIST返回的值顺序未确定

您可以尝试将查询包装到子选择中:

WITH RECURSIVE
        hierarchy (folderid, ParentFolderId, FolderName, rn) AS
        (
        SELECT  folderid, ParentFolderId, FolderName, 1
        FROM    folders
        WHERE   folderid = :folderid
        UNION ALL
        SELECT  folderid, ParentFolderId, FolderName, p.rn + 1
        FROM    folders f
        JOIN    hierarchy p
        ON      p.parentFolderID = f.folderID
        )
SELECT  LIST(FolderName, '  ')
FROM    (
        SELECT  *
        FROM    hierarchy
        ORDER BY
                rn DESC
        )

,但是,这不能保证工作,即使它意外地工作,它也可以在任何新版本中中断。

在层次结构的第一个select语句中添加一个计算的int字段,并对其进行递增。这样,层次结构的结果将有一个增量文件进行反向排序。

注意,我不是火鸟男,所以这只是一个建议。

相关内容

  • 没有找到相关文章

最新更新