Реляційні системи керування базами даних на основі SQL лише частково підходять для ієрархічних або рекурсивних запитів. Інші системи, такі як ArangoDB, краще підходять для цього (про це була чудова доповідь на GOTO 2016 ). Однак, також можливо створювати рекурсивні запити в SQL за допомогою Common Table Expressions , що дозволяє, наприклад, запитувати класичні таблиці батьків/дочір для всіх предків та нащадків.
Наприклад, у PostgreSQL це виглядає так:
0672c4761d202a35a9059fa137ace7c3
Якщо ви хочете отримати всіх дочірніх елементів певного item_id, ви використовуєте загальні вирази таблиці:
0672c4761d202a35a9059fa137ace7c3
Запитати батьків теж не проблема:
0672c4761d202a35a9059fa137ace7c3