Есть две таблички:
CREATE TABLE USERS
(
USER_ID NUMBER,
// .........
PRIMARY KEY (USER_ID)
);
CREATE TABLE USER_GROUPS
(
USER_ID NUMBER,
GROUP_ID NUMBER,
PRIMARY KEY (USER_ID, GROUP_ID)
);
В USERS, понятное дело, юзера со своими уникальными номерами. Но там же находятся и группы. Любой пользователь может оказаться группой. Отношения вхождения в группу описаны в USER_GROUPS.
Когда отношения простые (юзера входят в группы), то вопросов не возникает, но хотелось бы, с целью гибкости управления, расширить их так, чтобы группы тоже могли входить в группы.
Нужно получить список групп, к которым имеет отношение юзер.
Если уровней таких вложений ограниченное число, то я это решил так (для двух уровней групп):
SELECT GROUP_ID
FROM USER_GROUPS
WHERE USER_ID = :USER
OR USER_ID IN (
SELECT GROUP_ID
FROM USER_GROUPS
WHERE USER_ID = :USER
)
А вот если не лимитировать вложенность?
Рекурсия?
Какой вариант можно придумать?
P.S.: пожалуйста, ближе к теме и советов поменять структуру данных не надо.