Portál AbcLinuxu, 27. října 2025 12:07
Co znamená:
Úkolem je vytvořit pro každou hlavní kategorii počet zboží.
? Nemělo to být spíš zjistit počet nebo vypsat zboží v kategorii (včetně podkategorií)?
INSERT INTO category (id, parent_category_Id)
values (1,NULL);
INSERT INTO category (id, parent_category_Id)
values (2,NULL);
INSERT INTO category (id, parent_category_Id)
values (3,1);
INSERT INTO category (id, parent_category_Id)
values (4,2);
INSERT INTO category (id, parent_category_Id)
values (5,4);
INSERT INTO category (id, parent_category_Id)
values (6,4);
INSERT INTO category (id, parent_category_Id)
values (8,6);
INSERT INTO category (id, parent_category_Id)
values (9,NULL);
WITH RECURSIVE cat_cte (id, parent_category_id, depth, top_parent) AS
(
select id, parent_category_id, 0, id as top_parent
FROM category
where parent_category_id IS NULL
UNION ALL
select c.id, c.parent_category_id, cte.depth +1, cte.top_parent FROM category c INNER JOIN cat_cte cte
on c.parent_category_id = cte.id
) select * from cat_cte cte;
select * from category c left join category c2
on c.id = c2.parent_category_id
where c2.id IS NULL;
Děkuji za vaši analýzu
Upravil jsem formátování dotazu.
Ano, to je CTE, o kterém píšu níže :-)
Počítám, že dostal úkol ve škole nebo v práci, takže potřebuje vyjít s tím, co má :-)
Co se týče XML, to se dá vložit i do PostgreSQL a pak nad tím pustit XMLTABLE dotaz, který vypíše celou cestu (ID kategorií) nebo cokoli jiného.
Pokud to má být čistě relačním způsobem, tak na to slouží CTE dotazy. Tady je o tom i článek v češtině: CTE a analytické funkce v PostgreSQL.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.