我可以使用递归查询来查询叶子引用另一个 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;
我有 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;