如何反转此查询的结果?

时间:2011-07-21 12:38:52

标签: sql firebird recursive-query firebird2.1

我正在使用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的父级

如何将上述查询的结果反转为:

  

父母的父母\父母\儿童?

谢谢!

2 个答案:

答案 0 :(得分:1)

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
        )
但是,这并不保证能够正常工作,即使它偶然发生,也可能会破坏任何新版本。

答案 1 :(得分:0)

在hierarcy的第一个select语句中添加一个计算的int字段,然后递增它。这样,层次结果将有增量归档反向排序。

注意,我不是Firebird的人,所以这只是一个提案。