Стандартная задачка,но как сделать SELECTом!!!

LUKASUS
Дата: 13.10.2003 15:04:26
Привет всем
Помогите кто сталкивался с подобной задачей :

Есть таблица которая предатавляет собой структуру дерева
Есть поле Parent,значение которого код родителя (первичный ключ поле Kod)
Как с помощью SELECT выбрать все записи от заданной до корня дерева,тоесть
той записи у которой поле Parent = NILL
Berg
Дата: 13.10.2003 15:23:03
Так?


WHILE @current IS NOT NULL
BEGIN
print @current
SELECT @current = Parent FROM [table]
END
LUKASUS
Дата: 13.10.2003 15:30:13
Все хорошо,да только так выбирается все дерево, а мне бы выбрать
с определенной ветки(позиции дерева) вверх к корню
Berg
Дата: 13.10.2003 15:39:34
Ну, возможно, имеет смысл сделать перед запросом
SET @current = определенной ветки(позиции дерева)
ValeraS
Дата: 13.10.2003 15:39:47
Задача решается одним запросом, если предварительно написать функцию, определяющую является ли текущая запись предком указанной. Т.к. функция эта должна быть рекурсивной, а срабатывать она должна на кажтой строке таблицы, то работать такой запрос даже на не самых больших таблицах будет небыстро.
Crip
Дата: 13.10.2003 16:20:33
Уже столько на эту тему переписано , что уже не знаешь даже в какую ветку форума отсылать. Можно так...
declare @t table (ID int)


insert @t
select ID from SomeTable where Parent = @current

while (@@rowcount >0)
insert @t
select ID from SomeTable
where Parent in (select ID from @t t) and
ID not in (select ID from @t t)

select * from SomeTable s
inner join @t t on s.ID = t.ID
Andrey Sobolev
Дата: 13.10.2003 16:46:41
Мой тебе совет - бросай с деревьями.
Был очень плохой опыт на средних и больших базах!

WBR
Andrey V. Sobolev
s_andrey@mail333.com
babaEGA
Дата: 13.10.2003 16:51:10
2 Andrey Sobolev

автор писал:
Мой тебе совет - бросай с деревьями

а что можно предложить вместо деревьев?
когда заранее неизвестно число "уровней"?
Andrey Sobolev
Дата: 03.12.2003 12:08:03
Можно так:
Хранить объект а уровень его вхождения в виде числа x.y
И таким образом можно строить взаимоотношения между объектами

WBR
Andrey V. Sobolev
s_andrey@mail333.com
artemov
Дата: 03.12.2003 14:09:11
WHILE @current IS NOT NULL

BEGIN

print @current

SELECT @current = Parent FROM [table] where @curent=id

END