У меня есть таблица с само-асимметричной зависимостью «многие ко многим» между объектами. Я использую это отношение для создания надежного дерева между объектами.
Имея набор идентификаторов объектов, я хотел бы получить все объекты, которые находятся где-то в этом дереве зависимостей.
Вот пример таблицы объектов:
+----+------+
| ID | Name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
+----+------+
И таблица отношений:
+------------+-----------+
| Dependancy | Dependant |
+------------+-----------+
| 2 | 1 |
| 3 | 2 |
| 4 | 1 |
+------------+-----------+
Отображение A (ID: 1)
зависит от B(2)
и D(4)
, а B(2)
зависит от C(3)
.
Теперь я хотел бы построить один SQL-запрос, в котором {1}
в виде набора с одним идентификатором вернет четыре объекта в дереве зависимостей A
: A
, B
, D
и C
.
В качестве альтернативы также допустимо использование одного запроса для получения всех необходимых идентификаторов объектов, а другого - для получения их фактических данных.
Это должно работать независимо от количества уровней в дереве зависимостей / иерархии.
Я буду доволен либо примером SQLAlchemy, либо простым SQL для базы данных postgresql 10 (которую я посмотрю позже, как реализовать с помощью SQLAlchemy).
Спасибо!