Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Построить запрос (возможно рекурсия)  [new]
ogienko_ev
Member

Откуда:
Сообщений: 5
Добрый день, не могу построить запрос. Фото, что должно быть на выходе приложил.

Есть таблица, где поля Id, ParentId.

Мне нужно подать на вход значение id (99999), запрос должен вернуть всех косвенных родителей для данной записи. Это вообще реально сделать однтм запросом?

Может быть есть лучше/проще способы?

К сообщению приложен файл. Размер - 116Kb
29 авг 19, 14:11    [21959853]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос (возможно рекурсия)  [new]
ogienko_ev
Member

Откуда:
Сообщений: 5
Да, и текущую строку тоже надо вернуть, потому что там находится ParentId, для входного Id.
29 авг 19, 14:13    [21959858]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос (возможно рекурсия)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ogienko_ev,

cte
29 авг 19, 14:14    [21959860]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос (возможно рекурсия)  [new]
londinium
Member

Откуда: Киев
Сообщений: 1170
USE master
GO


DECLARE @InTemp TABLE(ID INT,PARENT_ID INT);
INSERT @InTemp(ID,PARENT_ID)
 VALUES(9,0),(999,9),(99999,999);

DECLARE @InStart INT;
SELECT @InStart=99999;

WITH CTE AS
(
  SELECT ID,PARENT_ID
  FROM @InTemp
  WHERE ID=@InStart
  
  UNION ALL
  
  SELECT TAB.ID,TAB.PARENT_ID
  FROM @InTemp AS TAB
  JOIN CTE AS X ON TAB.ID=X.PARENT_ID
  
  
) 
SELECT C.ID,C.PARENT_ID
FROM CTE AS C
OPTION (MAXRECURSION 100)


З.Ы. Фото задания просто шикарное
29 авг 19, 14:36    [21959881]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос (возможно рекурсия)  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Лучше, всё-таки, не фотографии присылать, а текст с необходимой информацией.
Которую хотя бы можно было скопипастить в виде текста (кода, словесной постановки задачи и т.п.).
Причём код можно было бы сразу вставить в SQL Server Manager и выполнить.
Например, создать у себя таблицы и наполнить их данными.

Это же для вас элементарно, разве нет?
29 авг 19, 14:42    [21959887]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос (возможно рекурсия)  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
londinium
USE master
GO


DECLARE @InTemp TABLE(ID INT,PARENT_ID INT);
INSERT @InTemp(ID,PARENT_ID)
 VALUES(9,0),(999,9),(99999,999);

DECLARE @InStart INT;
SELECT @InStart=99999;

WITH CTE AS
(
  SELECT ID,PARENT_ID
  FROM @InTemp
  WHERE ID=@InStart
  
  UNION ALL
  
  SELECT TAB.ID,TAB.PARENT_ID
  FROM @InTemp AS TAB
  JOIN CTE AS X ON TAB.ID=X.PARENT_ID
  
  
) 
SELECT C.ID,C.PARENT_ID
FROM CTE AS C
OPTION (MAXRECURSION 100)



З.Ы. Фото задания просто шикарное
MAXRECURSION 100 и так задано по умолчанию.
29 авг 19, 14:43    [21959888]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить