我有一个行的表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查询来完成吗? 如果是这样,怎么样?
答案 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;