该模型的示例如下:
WITH RECURSIVE test_data (id, p_id) AS (
VALUES
(1, NULL),
(2, 1),
(3, 1),
(4, 3),
(5, 4),
(6, null),
(7, null)
),
r (id) AS (
SELECT id FROM test_data WHERE id = 3
UNION
SELECT td.id FROM r JOIN test_data td ON r.id = td.p_id
UNION
SELECT td.p_id FROM r JOIN test_data td ON r.id = td.id
)
SELECT * FROM r;
在这种情况下,我希望查询不仅在搜索后代的方向上扩展(第一个递归部分),而且还在搜索父母的方向上扩展(第二个递归部分)。分别地,两个递归部分都起作用(如果你注释掉第二个部分)。但它们结合在一起会出现错误:
[42P19] 错误:对查询“r”的递归引用不得出现在其非递归项中
有没有办法在递归 CTE 中使用两个 UNION,或者这是严格禁止的并且没有解决方法?