Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.24;
Скачать: CL | DM;

Вниз

Уважаемые спецы! Помогите пожалуйста с рекурсивным запросом.   Найти похожие ветки 

 
hgreg   (2002-10-02 12:14) [0]

Есть таблица типа

ID (int)
Title (varchar)
ParentID (int) - ссылка на ID

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

Заранее благодарен.


 
Prooksius ©   (2002-10-02 12:15) [1]

www.ibase.ru


 
3JIA9I CyKA ©   (2002-10-02 12:39) [2]

Критично использовать рекурсию?


 
hgreg   (2002-10-02 12:40) [3]

Совершенно не критично - мне нужно чтоб оно работало :)


 
Delirium ©   (2002-10-02 13:02) [4]

Развёртка простого дерева

set nocount on
select * into #tmp from test where id=3
while exists(select * from test
where (Parentid in (select id from #tmp))
and (id not in (select id from #tmp)))
insert #tmp select * from test
where (Parentid in (select id from #tmp))
and (id not in (select id from #tmp))
select * from #tmp
drop table #tmp


 
hgreg   (2002-10-02 13:56) [5]

Огромное спасибо - пришлось кое что поправить - но все получилось :)


 
Desdechado ©   (2002-10-02 14:52) [6]

рекурсия в IB, например, ограничена (точно не помню, по-моему 16)


 
Prooksius ©   (2002-10-02 15:20) [7]

Цитирую Data Definition Guide:

Note Stored procedures can be nested up to 1,000 levels deep. This limitation helps to prevent infinite loops that can occur when a recursive procedure provides no absolute terminating condition. Nested procedure calls can be restricted to fewer than 1,000 levels by memory and stack limitations of the server.

По-русски - до 1000 вложений.


 
vuk ©   (2002-10-02 16:06) [8]

Добавлю немного к тому, что писал Delirium.

Если используете MSSQL 2000, можно развертку делать в таблицу-переменную. Оно быстрее будет.


 
SergSuper   (2002-10-03 11:03) [9]

>Prooksius & Desdechado
Вобще-то в MS SQL рекурсия ограничена 32 вызовами. Но в решении, которое привёл Delirium, они всё равно не нужны.

>vuk
Хоть и MS рекомендует везде где это возможно использовать таблицы-переменные, на практике ускорения от их использования не получается. Во всяком случае я не обнаружил. Иногда даже медленне немного.
Т.е. использовать их надо, но ждать что оно будет быстрее работать не стоит.


 
Prooksius ©   (2002-10-03 11:05) [10]

2 SergSuper (03.10.02 11:03)
Это у нас маленький оффтопик - про Interbase вам рассказали :)


 
Desdechado ©   (2002-10-03 13:56) [11]

2 Prooksius © (02.10.02 15:20)
в шестерке - да (как оказалось), а пару лет назад я читал хелп по ИБ5.5 - вот в памяти и задержалось. А может быть это был даже информикс, тогда с ним тоже работал.
короче, оффтопик явный :)



Страницы: 1 вся ветка

Текущий архив: 2002.10.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-78330
GIL
2002-10-08 04:07
2002.10.24
Позиция курсора в RichEdit е


14-78600
IronHawk
2002-09-26 01:28
2002.10.24
Тут пролетала, недели две назад, тема о ВСТРЕЧЕ МАСТАКОВ В КИЕВЕ


6-78567
dnsokol
2002-08-23 10:09
2002.10.24
DialUp VS пастоянное соединение (вопрос жизни и смерти)


14-78660
kaif
2002-10-04 18:55
2002.10.24
Felix Metall


1-78503
XPatriot()
2002-10-13 20:13
2002.10.24
Работа с кнопками.