Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на отбор документов из иерархического списка. / 6 сообщений из 6, страница 1 из 1
23.08.2007, 10:32
    #34746670
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
У меня возникла проблема. Есть типичный список подчиненности. Таблица из двух полей Родитель-Ребенок (счетчик не всчет). У меня это документация. Задача - отобрать все документы, которые входят в произвольный узел. Сложности в том, что некоторые документы могут быть приложениями для других документов, причем на разных уровнях вложенности. Т.е. если просто сделать отбор всех упоминаний документов, то один и тот же документ может упоминаться несколько раз. А мне нужен список где документы упоминались бы только один раз. Раньше я пользовался вложенными Select-ами. Но тогда уровень вложенности был ограничен. А сейчас изменилась структура базы и уровень вложенности перестал быть ограничен. Конечно не 100, но с 3-х до 10-15 может возрасти запросто. Прошу совета. Можно ли сделать отбор одним запросом?
...
Рейтинг: 0 / 0
23.08.2007, 10:43
    #34746727
Быкис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
А чем так плохо? Правда, в таблице само собой, ещё есть поля iRealID (-1, если это и есть сам элемент и некий "настоящий" ID если это всего лишь ссылка на существующий элемент - какраз для того чтобы избежать повторов, если у когото больше одного родителя). Но функции принцип такой.
...
Рейтинг: 0 / 0
23.08.2007, 17:46
    #34748833
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
Ну, что сказать?... Мне не надо ни создавать, ни удалять ни базы, ни таблицы. Да и честно, сижу на солнечной стороне, кондишена нет, мозги плавятся, в тени +32, весь мокрый как мышь. Ни как не врублюсь. И в голову ничего подходящего не лезет. Может подробнее расписать? Есть таблица еидЫмофяю В ней два столбца: Parent и Childer. надо сформулировать запрос так, чтобы задав одно значение для Parent, получить всех Childer, входящих в него. Вложенность может быть любой (или хотя бы для фиксированной). И каждый Childer должен быть упомянут однократно.
...
Рейтинг: 0 / 0
23.08.2007, 18:12
    #34748923
Karfaqen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
Jossнадо сформулировать запрос так, чтобы задав одно значение для Parent, получить всех Childer, входящих в негоИначе говоря, зная код некоторого узла, вам нужно найти все множество его потомков? Т.е. не полько прямых детей, но и внуков, правнуков и т.д., так?

Тогда вы должны понимать, что в иерархической субд для того чтобы вытащить такую генеалогию запросом, вам придется в этом запросе резервировать всю цепочку join'ов на максимальную возможную глубину - которая при этом, понятное дело, должна быть конечна и заявлена в качестве предела возможностей вашего приложения.

Если такое ограничение является для вас неприемлимым, тогда можно писать рекурсивную функцию на VB по сбору кодов всех потомков исходного предка (в массив, коллекцию, временную таблицу - в зависимости от дальнейших шагов).
...
Рейтинг: 0 / 0
23.08.2007, 18:35
    #34748989
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
Да, когда-то я и делал вложенные select на всю глубину, но сейчас хотел от этого избавиться. Но уж очень не хотелось создавать временные таблицы. Но если без этого не возможно, то наверное придется пойти этим путем. Создать временную таблицу, занести туда всё, что входит, начиная с верхнего узла и до пра-пра-пра..., а потом уже из этой таблицы сделать нужную выборку. Только не забыть её потом удалить.
...
Рейтинг: 0 / 0
23.08.2007, 18:37
    #34748995
proposed amendment
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на отбор документов из иерархического списка.
JossДа, когда-то я и делал вложенные select на всю глубину, но сейчас хотел от этого избавиться. Но уж очень не хотелось создавать временные таблицы. Но если без этого не возможно, то наверное придется пойти этим путем. Создать временную таблицу, занести туда всё, что входит, начиная с верхнего узла и до пра-пра-пра..., а потом уже из этой таблицы сделать нужную выборку. Только не забыть её потом удалить.

можно не удалять а перезаписывать в нее данные "поверх"
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на отбор документов из иерархического списка. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]