У меня есть таблица, в которой хранится иерархия рабочих групп в нашей организации. Это выглядит примерно так:
CREATE TABLE WORKGROUPS (
WORKGROUPID NUMBER NULL,
NAME VARCHAR2(100) NOT NULL,
PARENTWORKGROUPID NUMBER NOT NULL,
WORKGROUPLEVEL CHAR(1) DEFAULT 1 NOT NULL,
CONSTRAINT WORKGROUPS_PK PRIMARY KEY(WORKGROUPID)
)
Например, может быть три уровня рабочих групп:
ID 1 - Sales (PARENTWORKGROUPID = 0)
ID 2 - Business Sales (PARENTWORKGROUPID = 1)
ID 3 - West Coast B2B (PARENTWORKGROUPID = 2)
Итак, родитель 3 - это 2, родитель 2 - 1, а 1 - рабочая группа верхнего уровня без родителей, поэтому мы используем 0.
Теперь у нас есть стол ЗАДАЧ. Каждая строка TASKS имеет столбец WORKGROUPID, который указывает на WORKGROUPID в таблице WORKGROUPS.
Мне нужно написать запрос, который возвращает все ЗАДАЧИ, которые находятся в данной рабочей группе верхнего уровня, например все, что в разделе «Продажи» (которое в приведенном выше примере может быть WORKGROUPIDs 1, 2 или 3. По сути, это рекурсивно запрос.
Я могу придумать несколько способов сделать это, используя LEFT JOIN для проверки каждого уровня, но я бы предпочел держаться подальше от решений, которые жестко кодируют количество уровней, поскольку база данных предназначена для разрешения любого количества ярусы. Любое другое решение, которое я могу придумать, включает изменение схемы таблицы, чего я не могу сделать в данный момент. Есть идеи? Спасибо!