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

Откуда:
Сообщений: 18
Есть таблица, данные которые хранятся ввиде каталога
DECLARE @table TABLE
(id Integer, ParentId Integer, Name NVARCHAR(50))

INSERT INTO @table(id, ParentId, Name)
VALUES (0, -1, '0A')

INSERT INTO @table(id, ParentId, Name)
VALUES (1, 0, '1A')

INSERT INTO @table(id, ParentId, Name)
VALUES (2, 0, '2A')

INSERT INTO @table(id, ParentId, Name)
VALUES (3, 1, '3A')

INSERT INTO @table(id, ParentId, Name)
VALUES (4, 2, '4A')

INSERT INTO @table(id, ParentId, Name)
VALUES (5, 3, '5A')

INSERT INTO @table(id, ParentId, Name)
VALUES (6, 4, '6A')


Полная таблица

ID, ParentId, Name
0 -1 0A
1 0 1A
2 0 2A
3 1 3A
4 2 4A
5 3 5A
6 4 6A

Требуется написать запрос, результатом которого будет выдаваться по правилу.
На вход даем ID. На выходе получаем все его дочерние и родительские элементы.

То есть если на вход мы подаем id = 2
То на выходи должны иметь строки


ID, ParentId, Namw
0 -1 0A
2 0 2A
4 2 4A
6 4 6A

Можно, конечно, сделать через темповую таблицу. Но можно ли решить эту задачи без использование темповой таблицы?
26 авг 12, 20:28    [13066338]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос.  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
ramons,

можно.
declare @id int
set @id=2
;
with tmp (flag,id,ParentId,Name) as (
  select 0,id,ParentId,Name
  from @table
  where id=@id
  union all
  select 1,b.id,b.ParentId,b.Name
  from tmp a
    inner join @table b on b.id=a.ParentId
  where a.flag in (0,1)
  union all
  select 2,b.id,b.ParentId,b.Name
  from tmp a
    inner join @table b on b.ParentId=a.id
  where a.flag in (0,2)
)
select id,ParentId,Name
from tmp
26 авг 12, 21:13    [13066455]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос.  [new]
ramons
Member

Откуда:
Сообщений: 18
Serg_77m,
Спасибо
26 авг 12, 21:46    [13066567]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить