6

Firebird2.1を使用しています。Folders次のフィールドを持つテーブル名があります。

  • FolderID
  • ParentFolderID
  • フォルダ名

ParentFolderIDルートフォルダの場合は-1、それ以外の場合は親フォルダのIDが含まれます。

低レベルノードのすべての親(ルートフォルダまで)を見つけるにはどうすればよいですか?

再帰クエリが必要ですか?(Firebirdはそれらをサポートします

4

1 に答える 1

9

このようなもの:

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

編集:次のクエリは階層を「上」に移動し、特定のフォルダのすべての親を検索します。

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
于 2011-07-05T17:23:00.537 に答える