SQL文档递归匹配名称

时间:2019-05-15 13:44:33

标签: sql recursive-query

我有一个使用自引用的具有递归树结构的文档表。

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

此问题是,它只会返回名称与预期结尾匹配的直接子文档。因为如果直接子代与名称不匹配(因为它们不会像文件夹一样),则它们将不再遍历。

是否可以遍历整棵树,但仅返回名称与我的结尾匹配的文档?

0 个答案:

没有答案