У меня есть таблица, которая связывает работу вместе:Как решить эту проблему с помощью CTE?
JobToJob
(
JobToJobId int
SourceJobId int
DestinationJobId int
)
Задание может иметь несколько рабочих мест Направление (т.е. более 1 JobToJob записи), но только один источник задания. Таким образом, создается древовидная структура. Корневая запись определяется как та, которая не имеет записей DestinationJobId на любой другой записи.
Требование, которое у меня есть, состоит в том, чтобы получить все дерево для предоставленного идентификатора задания. Я разделить это на две части:
- Найдите корень работу для данного задания идентификатора
- извлекать все листья для ид корня работы.
У меня есть попытка попробовать это с использованием рекурсивного КТВ, но я никуда не денусь. Я знаю, что я мог бы сделать это, используя хранимую процедуру, но я стараюсь избегать этого, поскольку они склонны замедлять работу.
У кого-нибудь с более рекурсивным опытом CTE, чем у меня, есть предложения относительно наилучшего подхода к этому?
Приветствия,
Роб
Если задание может иметь только одно задание источника, то я думаю, что лучший дизайн базы данных будет создавать поле 'SourceJobID' в таблице' Job'. затем создайте два CTE (один для получения всех исходных заданий (вверх)) и второй форматирующий все назначения (вниз) после просто UNION, что два CTE ... – Fabio
К сожалению, это устаревшая система, и это не вариант в этом случай ... –