Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 cte recursive update  [new]
cte123
Guest
есть таблица t1 вида:
childparentvalue
1222224444442
4692154692330
4692335735770
5735776864925


каким образом можно обновить потомков значением, взятым с самого высшего уровня?
т.е. в итоге должно получиться
childparentvalue
1222224444442
4692154692335
4692335735775
5735776864925


пробовал рекурсивным cte, но обновляется только строка с child 469233, а остальные остаются 0.
Интересует идея. Каким образом можно заджойнить к каждому потомку самого высшего родителя..
11 апр 12, 22:09    [12402518]     Ответить | Цитировать Сообщить модератору
 Re: cte recursive update  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
cte123,

так?
create table #t(
child int not null,
parent int null,
value varchar(20) not null)
go

insert into #t(child,parent,value)
values(1,null,'1'),(2,1,'1'),(3,null,'0'),(4,2,'1')
go

-- проверочка
;
with ste as (
select t.child,t.parent,t.value from #t t
where t.child = 1
union all
select t.child,t.parent,t.value from #t t
join ste s on s.child = t.parent
)
select * from ste

;
with ste as (
select t.child,t.parent,t.value from #t t
where t.child = 1
union all
select t.child,t.parent,t.value from #t t
join ste s on s.child = t.parent
)
update #t 
set #t.value = ste.child -- тут любое значение для апдейта
from ste
where #t.child = ste.child

-- проверочка
;
with ste as (
select t.child,t.parent,t.value from #t t
where t.child = 1
union all
select t.child,t.parent,t.value from #t t
join ste s on s.child = t.parent
)
select * from ste
11 апр 12, 22:38    [12402640]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить