Я работаю с SQL серверной базой данных, и у меня есть следующие две таблицы:
Nested Apps Nested App Groups
|---------------------|------------------| |---------------------|------------------|
| App_Group | App | | App_Group | Child_App_Group |
|---------------------|------------------| |---------------------|------------------|
| 5 | A | | 1 | 4 |
|---------------------|------------------| |---------------------|------------------|
| 7 | B | | 4 | 5 |
|---------------------|------------------| |---------------------|------------------|
| 9 | C | | 2 | 6 |
|---------------------|------------------| |---------------------|------------------|
| 6 | 7 |
|---------------------|------------------|
| 3 | 8 |
|---------------------|------------------|
| 8 | 9 |
|---------------------|------------------|
Слева мы видим отношение родитель / потомок между группами приложений и приложениями. Справа мы видим отношение родитель / потомок между группами приложений и группами приложений (у приложений не может быть детей). В этом примере приложение A является дочерним по отношению к группе приложений 5, которая является дочерним по отношению к группе приложений 4, которая затем является дочерней по отношению к группе приложений 1.
Что мне нужно, так это таблица, в которой показан вложенный родительский элемент / Дочерние отношения групп приложений и приложений, независимо от того, является ли приложение прямым потомком или «внуком», и т. д. c ... Примерно так:
|---------------------|------------------|
| App_Group | App |
|---------------------|------------------|
| 1 | A |
|---------------------|------------------|
| 4 | A |
|---------------------|------------------|
| 5 | A |
|---------------------|------------------|
| 2 | B |
|---------------------|------------------|
| 6 | B |
|---------------------|------------------|
| 7 | B |
|---------------------|------------------|
| 3 | C |
|---------------------|------------------|
| 8 | C |
|---------------------|------------------|
| 9 | C |
|---------------------|------------------|
Я на самом деле не приблизился к решая это. Я пытался работать с идеей, что мне как-то нужно пройти через иерархию, что было бы немного проще, если бы у меня было одно приложение за раз. Но здесь я должен сделать это с 3 приложениями одновременно. Я понятия не имею, как начать .. Кто-нибудь?
ОБНОВЛЕНИЕ:
Я очень близко подошел к чему-то вроде этого:
WITH cte AS ( SELECT app_group_id, app_id FROM nested_apps UNION ALL SELECT
nag.app_group_id, c.app_id FROM nested_app_groups nag JOIN cte c ON
nag.child_app_group_id = c.app_group_id ) SELECT app_group_id, app_id FROM
cte