Реляционные системы управления базами данных, основанные на SQL, лишь частично подходят для иерархических или рекурсивных запросов. Для этого лучше подходят другие системы, такие как ArangoDB (об этом был отличный доклад на GOTO 2016 ). Однако также возможно создавать рекурсивные запросы в SQL с использованием общих табличных выражений (Common Table Expressions) , что позволяет, например, запрашивать все предки и потомки из классических таблиц «родитель/потомок».
В PostgreSQL это выглядит так, например:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251
Если вы хотите получить всех дочерних элементов определенного item_id, вы используете общие табличные выражения:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251
Спросить у родителей тоже не проблема:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251