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

Откуда:
Сообщений: 1368
нужно сделать join одного дерева с другим, мозгов не хватает как. Вот такая телега, в конце 2 дерева, нужно их пересечение.

declare @t table(id int, descr varchar(20))
insert @t select 1, 'корень'
insert @t select 2, 'поддерево1'
insert @t select 3, 'поддерево2'
insert @t select 4, 'поддерево3'
insert @t select 5, 'поддерево4'
insert @t select 6, 'поддерево5'
insert @t select 7, 'поддерево6'
insert @t select 8, 'поддерево7'
insert @t select 9, 'поддерево7'
insert @t select 10, 'поддерево7'
insert @t select 11, 'поддерево7'
insert @t select 0, 'поддерево7'

;

declare @link table(id int, parent int)
insert @link select 2, 1
insert @link select 3, 2
insert @link select 4, 1
insert @link select 5, 4
insert @link select 6, 4
insert @link select 7, 1
insert @link select 8, 7
insert @link select 1, 0
insert @link select 9, 0
insert @link select 11, 9
insert @link select 10, 9

;

declare @point table(point int)
insert @point select 2
insert @point select 5
insert @point select 8
insert @point select 11

;

;with cte as
(
	select point id, 1 marked
	from @point
		union all
	select l.parent, 0
	from cte c join @link l on l.id = c.id
)
select id, MAX(marked) marked
from cte
group by id
;

WITH tree AS
(
SELECT l.id
FROM @link l
WHERE
	l.parent = 1
UNION ALL
SELECT l.id
FROM @link l 
	JOIN tree t ON t.ID = l.parent
)
select * from tree t
--join @point p on p.point = t.id
10 ноя 16, 16:42    [19880126]     Ответить | Цитировать Сообщить модератору
 Re: Join двух деревьев  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Дядя Петя Вася,

всмысле так?
;with cte as
(
	select point id, 1 marked
	from @point
		union all
	select l.parent, 0
	from cte c join @link l on l.id = c.id
)
,
 tree AS
(
SELECT l.id
FROM @link l
WHERE
	l.parent = 1
UNION ALL
SELECT l.id
FROM @link l 
	JOIN tree t ON t.ID = l.parent
)
select * from cte t
join tree p on p.id = t.id
10 ноя 16, 17:17    [19880247]     Ответить | Цитировать Сообщить модератору
 Re: Join двух деревьев  [new]
Дядя Петя Вася
Member

Откуда:
Сообщений: 1368
WarAnt
Дядя Петя Вася,

всмысле так?
;with cte as
(
	select point id, 1 marked
	from @point
		union all
	select l.parent, 0
	from cte c join @link l on l.id = c.id
)
,
 tree AS
(
SELECT l.id
FROM @link l
WHERE
	l.parent = 1
UNION ALL
SELECT l.id
FROM @link l 
	JOIN tree t ON t.ID = l.parent
)
select * from cte t
join tree p on p.id = t.id

ага
10 ноя 16, 17:20    [19880266]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить