【发布时间】:2021-07-06 17:51:58
【问题描述】:
我正在尝试准备一个递归查询,该查询将在单个表中生成有关父子关系的数据。
这是一些测试数据:
CREATE TABLE test
(
id INTEGER,
parent INTEGER
);
INSERT INTO test (id, parent) VALUES
(2, 1),
(3, 1),
(7, 2),
(8, 3),
(9, 3),
(10, 8),
(11, 8);
1
/ \
2 3
/ / \
7 8 9
/ \
10 11
Excepted results:
-- id | ancestry | parent |
-- 1 | {1} | 1 |
-- 2 | {1,2} | 1 |
-- 3 | {1,3} | 1 |
-- 7 | {1,2,7} | 2 |
-- 8 | {1,3,8} | 3 |
-- 9 | {1,3,9} | 3 |
-- 10 | {1,3,8,10} | 8 |
-- 11 | {1,3,8,11} | 8 |
#Query 1:返回孩子 11 - {1,3,8,11} 的所有父母。这里的问题是我不知道如何标记 11 的第一个父母是 8。
WITH RECURSIVE c AS (
SELECT 11 AS id
UNION
SELECT t.parent
FROM test AS t
JOIN c ON c.id = t.id
)
SELECT * FROM c;
提前致谢。
【问题讨论】: