Portál AbcLinuxu, 13. července 2025 17:08
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.