我可以使用递归查询来查询叶子引用另一个 table 的树吗?

Can I use a recursive query to query a tree where the leaves reference another table?

我有 table A 列 "object_id" 和 2 个 NULL 列 A_id 和 B_id,A 的每一行(在具有相同 object_id) 引用 table A self 或 table 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
...

我的 objective 是收集属于给定 A object_id(如 1)及其所有后代的所有 B 行中的所有唯一数据。

这可以通过递归 CTE 查询来完成吗? 如果可以,怎么做?

首先使用标准的树遍历来收集所有的A ID。然后加入 B table:

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;