我使用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字段,并对其进行递增。这样,层次结构的结果将有一个增量文件进行反向排序。
注意,我不是火鸟男,所以这只是一个建议。