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