我有一个使用自引用的具有递归树结构的文档表。
Table Docs
------------
id
parentId -- parent Docs' id
name
isFile -- is this entry a file?
...
其中根文件夹具有parentId = null
。
现在,我想创建一个SQL查询,该查询以递归方式获取名称匹配(%.ending1
,%.ending2
)的文档
我的尝试使我想到了这一点:
WITH RECURSIVE DocsRecursive AS (
SELECT "id", "parentId", "name"
FROM "Docs"
WHERE id = <seed-id>
UNION ALL
SELECT child."id", child."parentId", child."name"
FROM "Docs" AS child
JOIN DocsRecursive AS parent ON parent.id = child."parentId" AND
(
child."name" LIKE '%.ending1' OR
child."name" LIKE '%.ending2'
)
)
SELECT * FROM DocsRecursive
此问题是,它只会返回名称与预期结尾匹配的直接子文档。因为如果直接子代与名称不匹配(因为它们不会像文件夹一样),则它们将不再遍历。
是否可以遍历整棵树,但仅返回名称与我的结尾匹配的文档?