Рекурсия?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Рекурсия?

Сообщение Faust » 11.03.2006 (Сб) 20:57

Есть таблица с двумя полями ParentID и ChildID. Надо для произвольного родителя вывести всех его детей. Т.е. не только прямых потомков, но и "внуков", "правнуков" и т.д. Внимание, вопрос: можно ли подобное реализовать в одном запросе? Пока что использую связку из временной таблицы, запросов на добавление и юзера в качестве итератора. Само мобой, хотелось бы реализовать это как-то элегантней.
Листинги не горят!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.03.2006 (Сб) 23:01

Боюсь что нет, это ж рекурсия...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.03.2006 (Вс) 5:41

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.03.2006 (Вс) 12:27

А что за база?
По слухам, в SQL2005 что-то подобное уже заготовлено.
Lasciate ogni speranza, voi ch'entrate.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 12.03.2006 (Вс) 15:31

2GSerg: Читал до этого. Но решения задачи не нашел... Это следует понимать, как отрицательный ответ?
2alibek: ACCESS 2000. В топике, куда меня послал GSerg, вы упоминали некую "дискуссию со skiperski", которую мне найти не удалось. Я был бы весьма признателен, если бы вы дали конкретную ссылку на соответствующий трэд.
Листинги не горят!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.03.2006 (Вс) 15:35

Faust
Вообще-то там приведено даже два решения, но для access да, не подходит ни одно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.03.2006 (Вс) 16:33

Faust писал(а):упоминали некую "дискуссию со skiperski"

Она была приватной, через ЛС :)
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.03.2006 (Пн) 10:27

GSerg писал(а):Faust
Вообще-то там приведено даже два решения, но для access да, не подходит ни одно...


Да какая разница...

Открываем клиентский Recordset. И далее пользуясь Filter дергаем ID-шки всех дочек в цикле.

Вот и все, собственно ;)
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 13.03.2006 (Пн) 12:46

Andrey Fedorov писал(а):
GSerg писал(а):Открываем клиентский Recordset. И далее пользуясь Filter дергаем ID-шки всех дочек в цикле.

А можно пример? А то я недавно начал в SQL работать... Откуда там циклы? :oops:
Листинги не горят!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.03.2006 (Пн) 14:06

Faust писал(а):
Andrey Fedorov писал(а):
GSerg писал(а):Открываем клиентский Recordset. И далее пользуясь Filter дергаем ID-шки всех дочек в цикле.

А можно пример? А то я недавно начал в SQL работать... Откуда там циклы? :oops:


Циклы в коде на VB
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 13.03.2006 (Пн) 14:14

В том то и проблема, что интересовала возможность реализации на чистом SQL...
Листинги не горят!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.03.2006 (Пн) 14:24

Faust писал(а):В том то и проблема, что интересовала возможность реализации на чистом SQL...


На Access-e это невозможно, да и смысла-то нет никакого.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 13.03.2006 (Пн) 14:52

да и смысла-то нет никакого

Смысл есть - это мое задание по курсу SQL... Долго не хотел просить готовый ответ и задавалв этом форуме вопросы по разным возникавшим у меня идеям. Сегодня преп обещал намекнуть, как это решается... Если это действительно все же реализуемо в Access, то выложу код.
Листинги не горят!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.03.2006 (Пн) 14:57

Faust писал(а):Если это действительно все же реализуемо в Access, то выложу код.


Давай. Для неограниченного уровня вложенностей.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.03.2006 (Пн) 15:09

Если препод сумеет показать решение в Access на чистом SQL (без задействования макросов VBA), то я сильно удивлюсь.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.03.2006 (Пн) 15:13

А что, в аксессовской версии SQL нет циклов (тот же WHILE, хотя бы)? Впрочем, уж GOTO наверняка есть, значит можно и цикл слепить... А там уже как-нить оценить @@ROWCOUNT или его аналог и крутить, пока он больше нуля.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.03.2006 (Пн) 15:17

Ennor, ты чего??? Какие циклы? Там вообще T-SQL нет, только голый SQL.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.03.2006 (Пн) 15:17

Ennor писал(а):А что, в аксессовской версии SQL нет циклов (тот же WHILE, хотя бы)? Впрочем, уж GOTO наверняка есть, значит можно и цикл слепить... А там уже как-нить оценить @@ROWCOUNT или его аналог и крутить, пока он больше нуля.


Мдя... И откуда все это богатство там?
Речь ведь идет об чистом SQL Access-a собственно к его-же MDB-шке.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList