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

时间:2018-06-12 08:01:13

标签: sqlite recursive-query

我有一个行的表A,列#34; object_id"和2个NULL列A_id和B_id,A的每一行(具有相同object_id的行之间)或者引用表A self或表B,即列A_id和B_id是互斥的。

e.g。

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
...

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

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

1 个答案:

答案 0 :(得分:0)

首先使用标准树步行来收集所有A ID。然后加入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;