Я пытаюсь осмыслить решение проблемы, возникающей у меня с помощью рекурсии, и я не могу полностью сосредоточиться на этом. У меня есть три стола. Мы назовем их DocGroup
, GroupGroup
и GroupUser
. В таблице DocGroup
есть нанимаемая структура одной записи, которая указывает другую запись в качестве ее родителя и так далее, пока запись не станет ее собственным родителем.
Doc Group
1 1
2 2
3 2
4 3
5 2
6 4
GroupGroup
содержит групповое вложение:
Group MemberGroup
4 2
4 1
GroupUser
отображает группу на количество пользователей:
Group User Key
1 1 ABC
1 3 BCD
1 4 CDE
2 1 DEF
2 2 EFG
2 3 FGH
3 3 GHI
4 2 HIJ
4 3 IJK
4 4 JKL
Итак, я хотел бы указать пользователя и документ и получить список всех ключей для этой комбинации. Например, если я выбираю пользователя 2 и документ 2, мне нужно вернуть «EFG», но если я выберу документ 6 и пользователя 3, мне нужно вернуть «IJK», «GHI», «FGH» и «BCD», потому что группа 2 и 1 находятся в группе 4, а группа 4 = документ 4, в котором есть группа 3. Во всех случаях мне нужно получить запись только для указанного пользователя.
Я бы предположил, что мне нужно несколько рекурсий, чтобы это сделать, но я не могу мысленно отобразить, как это можно сделать в SQL, и я не хочу переходить к циклам и курсорам для этого.