Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
3-78238
Tat
2002-10-01 11:20
2002.10.24
Live result set + SQL


1-78382
bobby
2002-10-14 08:48
2002.10.24
самопроизвольное изменение переменных


3-78301
feya
2002-10-03 19:40
2002.10.24
Как добавить данные в таблицу MSAccess


1-78508
KidMan
2002-10-10 22:13
2002.10.24
Переменная и ее отчистка


1-78348
=SOFT=
2002-10-14 17:33
2002.10.24
Запуск exe из ресурсов ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский