En primer lugar, su (2, 'grandparent', null)
debe ser (3, 'grandparent', null)
si realmente es un abuelo. En segundo lugar, su condición de unión (implícita) en la mitad recursiva de su consulta está al revés, desea sacar el padre de rt.levelparent
en lugar 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;