Могу ли я использовать рекурсивный запрос для запроса дерева, где листья ссылаются на другую таблицу? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица A строк со столбцом "object_id" и 2 пустыми столбцами A_id и B_id, каждая строка A (среди строк с одинаковым object_id) либо ссылается на таблицу A self или таблицу B, то есть столбцы A_id и B_idвзаимоисключающие.

например,

Table A
object_id     A_id     B_id
...
1             NULL      5
1             3         NULL
1             NULL      7
3             NULL      2
3             NULL      3
...

Table B
object_id     data
...
2              15
3              16
5              17
7              18
...

Моя цель - собрать все уникальные данные во всех строках B, которые принадлежат данному A object_id (например, 1) и всем его потомкам.

Можно ли это сделать с помощью рекурсивного запроса CTE?Если да, то как?

1 Ответ

0 голосов
/ 15 июня 2018

Сначала используйте стандартную прогулку по дереву, чтобы собрать все идентификаторы.Затем присоедините их к таблице B:

WITH RECURSIVE A_and_descendants(object_id) AS (
  VALUES (1)                              -- starts here

  UNION ALL

  SELECT A.A_id
  FROM A
  JOIN A_and_descendants USING (object_id)
)
SELECT B.data
FROM A
JOIN A_and_descendants USING (object_id)
JOIN B ON A.B_id = B.object_id;
...