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

Откуда:
Сообщений: 2695
Доброго дня господа !

Есть таблица
   F1       F2     
   10       1       
   20       1      
   30      10            
    1        5                   
   40       2
     2       6


Т.е. определить корень родительской записи
Пример
F1=30 родитель F2=10

в свою очередь
F1=10 родитель F2=1

в свою очередь
F1=1 родителя нет F2=5

Выводим
30 5
40 6


Необходимо получить результат
    1       5                   
   10       5    
   20       5     
   30       5     
     2      6
   40       6   


В Oracle это иерархичный запрос
Как это будет выглядит в MSQL подскажите пожалуйста

Благодарен !
13 дек 11, 19:52    [11759760]     Ответить | Цитировать Сообщить модератору
 Re: Определить родителя ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
declare @t table(F1 int, F2 int)
insert into @t values
(10,  1),
(20,  1),      
(30, 10),          
( 1,  5),
(40,  2),
( 2,  6)

;with cte(F1, F2) as (
   select t.F1, t.F2
     from @t as t
    where t.F2 not in (select r.F1 from @t as r)
   union all
   select t.F1, c.F2
     from @t as t
     join cte as c on c.F1 = t.F2
)
select * from cte

F1          F2
----------- -----------
1           5
2           6
40          6
10          5
20          5
30          5

(6 row(s) affected)
13 дек 11, 20:06    [11759839]     Ответить | Цитировать Сообщить модератору
 Re: Определить родителя ?  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Паганель
declare @t table(F1 int, F2 int)
insert into @t values
(10,  1),
(20,  1),      
(30, 10),          
( 1,  5),
(40,  2),
( 2,  6)

;with cte(F1, F2) as (
   select t.F1, t.F2
     from @t as t
    where t.F2 not in (select r.F1 from @t as r)
   union all
   select t.F1, c.F2
     from @t as t
     join cte as c on c.F1 = t.F2
)
select * from cte

F1          F2
----------- -----------
1           5
2           6
40          6
10          5
20          5
30          5

(6 row(s) affected)


Принято - понято !
Спасибо !
14 дек 11, 12:28    [11762981]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить