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

Вниз

Помогите красиво выбрать иерархические данные.   Найти похожие ветки 

 
Delph1   (2003-06-10 09:09) [0]

Имеется таблица структуры:
ID NUMBER(10) - Идентификатор
IDPARENT NUMBER(10) - Идентификатор вышестоящего
NAMES VARCHAR2(100) - Наименование

Обычная таблица для иерархических данных

Имеется N произвольно выбранных значений идентификаторов - из разных мест таблицы. Необходимо выбрать все записи, образующее дерево, на концах веток которого находятся узлы с указанными идентификаторами, т.е. выбрать указанные N записей и всех их предков. В результирующем наборе записи по ID повторяться не должны.

Спасибо.


 
passm ©   (2003-06-10 09:31) [1]

Delph1 (10.06.03 09:09)> Пахнет рекурсивным запросом :)
СУБД?


 
KSergey ©   (2003-06-10 09:32) [2]

Ну а это, слегка напрячься - не судьба?
Нужно оешение на SQL или как?


 
Johnmen ©   (2003-06-10 09:32) [3]

Зависит от БД...


 
Delph1   (2003-06-10 09:54) [4]

Oracle. На SQL. Есть способ для получения всех предков для указанного узла - connect by prior, start with. Сделал склейку запросов через UNION. Но не думаю, что это лучший способ. Хотелось бы узнать, может еще способы есть?


 
Johnmen ©   (2003-06-10 09:58) [5]

>Но не думаю, что это лучший способ.

Что именно ? connect by prior, start with или UNION ?


 
Delph1   (2003-06-10 10:04) [6]

UNION. Обьединение отдельных запросов для каждого идентификатора. При возрастании N растет время на формирование, разбор и выполнение запроса, да и размер запроса растет... Возможны ситуации, когда N = 500, а количество записей во всей таблице поряка 20000.


 
Наталия ©   (2003-06-10 10:07) [7]

Что-то ты путаешь...
Насколько мне не изменяет память connect by... находит не предков, а всех потомков.
Для поиска предков я писала простенькую рекурсивную функцию. На вход можно передать массив нужных id.


 
Sergey13 ©   (2003-06-10 10:08) [8]

2Delph1 (10.06.03 09:54)
>Сделал склейку запросов через UNION.
А зачем? Start with id in (твой перечень нужных узлов)


 
Delph1   (2003-06-10 10:11) [9]

> Sergey13 ©
> Start with id in

Так можно? Пробую...


 
Sergey13 ©   (2003-06-10 10:17) [10]

2Наталия © (10.06.03 10:07)
Изменяет вам память, Наташа. Тут все зависит от prior - что справа от = то и ищет. 8-)


 
Delph1   (2003-06-10 10:17) [11]

Все работает! Спасибо. Sergey13 - мастер :)


 
Наталия ©   (2003-06-10 10:23) [12]

Sergey13 © (10.06.03 10:17)
Да, ты прав. Освежила память. Совсем плоха стала... :))



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
3-7351
alienka
2003-06-09 12:45
2003.07.03
как сделать мастер-детайл не по всему полю, по его части?


1-7392
Mihey
2003-06-23 00:48
2003.07.03
Сделать OnMouseEnter и OnMouseLeave для компонента...


14-7658
INTAARI
2003-06-16 18:42
2003.07.03
Где можно взять WinSocket 2.0 и DCOM


14-7712
SiJack
2003-06-17 14:00
2003.07.03
Не могу сочинять хелпы, ОТМОРАЖИВАЮСЬ !!!


1-7532
nester
2003-06-17 21:08
2003.07.03
Как сделать фон картинкой в TListView?