PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgres - mit rekursiv

Zuallererst Ihr (2, 'grandparent', null) sollte (3, 'grandparent', null) sein wenn es wirklich ein Großelternteil ist. Zweitens ist Ihre (implizite) Join-Bedingung in der rekursiven Hälfte Ihrer Abfrage rückwärts, Sie möchten das übergeordnete Element aus rt.levelparent herausholen statt 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;