Есть две таблички:
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.: пожалуйста, ближе к теме и советов поменять структуру данных не надо.