Документы SQL, совпадающие с именами рекурсивно - PullRequest
1 голос
/ 15 мая 2019

У меня есть таблица документов с рекурсивной древовидной структурой, использующей собственные ссылки.

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

Проблема в том, что он возвращает прямые дочерние документы только в том случае, если имя соответствует предполагаемым окончаниям.Потому что, если прямые потомки не совпадают с именами (поскольку они не совпадают, так как они являются папками), они не просматриваются дальше.

Возможно ли пройти по всему дереву, но вернуть документы только там, гдеимя соответствует моему окончанию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...