Em primeiro lugar, seu
(2, 'grandparent', null)
deve ser (3, 'grandparent', null)
se é realmente um avô. Em segundo lugar, sua condição de junção (implícita) na metade recursiva de sua consulta está invertida, você deseja obter o pai de rt.levelparent
em vez de t.parent_level
:WITH RECURSIVE recursetree(level_id, levelparent) AS (
SELECT level_id, parent_level
FROM level
WHERE level_id = 197
UNION ALL
SELECT t.level_id, t.parent_level
FROM level t JOIN recursetree rt ON rt.levelparent = t.level_id
-- join condition fixed and ANSI-ified above
)
SELECT * FROM recursetree;