Firebird2.1を使用しています。Folders
次のフィールドを持つテーブル名があります。
- FolderID
- ParentFolderID
- フォルダ名
ParentFolderID
ルートフォルダの場合は-1、それ以外の場合は親フォルダのIDが含まれます。
低レベルノードのすべての親(ルートフォルダまで)を見つけるにはどうすればよいですか?
再帰クエリが必要ですか?(Firebirdはそれらをサポートします)
Firebird2.1を使用しています。Folders
次のフィールドを持つテーブル名があります。
ParentFolderID
ルートフォルダの場合は-1、それ以外の場合は親フォルダのIDが含まれます。
低レベルノードのすべての親(ルートフォルダまで)を見つけるにはどうすればよいですか?
再帰クエリが必要ですか?(Firebirdはそれらをサポートします)
このようなもの:
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