如何使用SQL在数据库中检测具有嵌套关系的父级?

Ste*_*eve 6 sql firebird recursive-query firebird2.1

我正在使用Firebird 2.1.有一个表名Folders,字段为:

  • FolderID
  • ParentFolderID
  • 文件夹名称

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

如何找到低级节点的所有父级(直到根文件夹)?

我需要递归查询吗?(Firebird支持他们)

a_h*_*ame 8

像这样的东西:

WITH RECURSIVE hierarchy (folderid, ParentFolderId, FolderName) as (
   SELECT folderid, ParentFolderId, FolderName
   FROM folders
   WHERE ParentFolderID = -1

   UNION ALL

   SELECT folderid, ParentFolderId, FolderName
   FROM folders f
     JOIN hierarchy p ON p.folderID = f.parentFolderID
)
SELECT *
FROM hierarchy
Run Code Online (Sandbox Code Playgroud)

编辑:以下查询将遍历层次结构"向上",查找给定文件夹的所有父项.

WITH RECURSIVE hierarchy (folderid, ParentFolderId, FolderName) as (
   SELECT folderid, ParentFolderId, FolderName
   FROM folders
   WHERE folderid = 42

   UNION ALL

   SELECT folderid, ParentFolderId, FolderName
   FROM folders f
     JOIN hierarchy p ON p.parentFolderID = f.folderID
)
SELECT *
FROM hierarchy
Run Code Online (Sandbox Code Playgroud)