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

Вниз

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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
1-7438
Илайдж
2003-06-23 14:06
2003.07.03
Печать содержимого TImage.


1-7493
Иванов Сергей
2003-06-21 10:32
2003.07.03
путаница с формами


1-7467
SkySlider
2003-06-20 14:20
2003.07.03
Проблемы с RegisterPropertyEditor


1-7460
clickmaker
2003-06-20 14:24
2003.07.03
record как out-параметр в методах IAppServer


1-7543
Mishenka
2003-06-22 19:59
2003.07.03
Как выделить элемент в ListView???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский