Here is both table and data for testing:
CREATE TABLE if not exists cars ( id serial PRIMARY KEY, parent_code INT, descr CHARACTER VARYING(50) NOT NULL);-- Level 1INSERT INTO cars(parent_code, descr) VALUES (null, 'Volkswagen');INSERT INTO cars(parent_code, descr) VALUES (null, 'Tesla');-- Level 2INSERT INTO cars(parent_code, descr) VALUES (1, 'Polo');INSERT INTO cars(parent_code, descr) VALUES (1, 'Golf');INSERT INTO cars(parent_code, descr) VALUES (2, '3');INSERT INTO cars(parent_code, descr) VALUES (2, 'S');INSERT INTO cars(parent_code, descr) VALUES (2, 'X');-- Level 3INSERT INTO cars(parent_code, descr) VALUES (3, 'diesel');INSERT INTO cars(parent_code, descr) VALUES (3, 'gasoline');INSERT INTO cars(parent_code, descr) VALUES (4, 'diesel');INSERT INTO cars(parent_code, descr) VALUES (4, 'gasoline');INSERT INTO cars(parent_code, descr) VALUES (5, 'electric');INSERT INTO cars(parent_code, descr) VALUES (6, 'electric');INSERT INTO cars(parent_code, descr) VALUES (7, 'electric');
And here is the view (which I tried) with a recursive CTE:
WITH RECURSIVE tree_cars AS ( select descr from cars union all select concat(' -> ', descr) from cars)--table tree_cars;select * from tree_cars;
But the output is not what I expect:
VolkswagenTeslaPoloGolf3SXdieselgasolinedieselgasolineelectricelectricelectric -> Volkswagen -> Tesla -> Polo -> Golf -> 3 -> S -> X -> diesel -> gasoline -> diesel -> gasoline -> electric -> electric -> electric
Since I would want something like:
Tesla -> 3 -> electric -> S -> electric -> X -> electricVolkswagen -> Golf -> diesel -> gasoline -> Polo -> diesel -> gasoline