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

Вниз

Знатокам SQL посвящается...   Найти похожие ветки 

 
Leonon   (2002-10-31 15:59) [0]

Привет, Уважаемые Мастера! Есть Таблица1, которая организует древовидную иерархию по двум полям ID и ParentID. Задача выбрать все записи, которые находятся в подчинении у заданной. В Oracle это просто, путем следующего запроса:
SELECT * FROM NODES CONNECT BY PRIOR ParentID=ID
START WHITH ID=N /*где N номер узла*/. Однако в Local SQL такой фишки нет. Как грамотно построить запрос, если число подчинений за ранее не известно???


 
3JIA9I CyKA   (2002-10-31 16:04) [1]

Удалено модератором


 
Delirium   (2002-10-31 16:16) [2]

В Local SQL действительно невозможно построить адекватный такой задаче запрос. Остаётся фильтровать TDataSet.


 
Jeer   (2002-10-31 16:31) [3]

Можно, но не всегда эффективно.

Рекурсивно заполняется TTreeView на основе ID и PARENT, что м.б. громоздко, но если записей не много - то терпимо.
Далее, по TTreeView строится ветка вниз или вверх и формируется строка с нужными ID

Далее - SELECT ... WHERE ID IN (...)


 
Delirium   (2002-10-31 16:34) [4]

"Можно, но не всегда эффективно" - пример, пожалуйста


 
Leonon   (2002-10-31 17:04) [5]

Причем задача решается просто, если знать, что колличество вложений не привышает зааданное число. Так как быть?

Jeer, а что находится в скобках WHERE ID IN ( ? )


 
Leonon   (2002-10-31 17:18) [6]

2 Jeer

Я тебя понял.


 
MMF   (2002-10-31 17:41) [7]

http://sdm.viptop.ru/articles/sqltrees.html
http://mathc.chat.ru/a3/articl03.htm
http://www.j2.ru/frozenfido/ru.algorithms/143013c9b96ef.html
Дома у меня есть еще ссылки, я довольно плотно этой темой занимался. Вначале пошел по неверному пути матрицы смежности (чего тебе делать не советую) - в дереве размером в 18000 элементов уже было заметно медленно суммирование параметра от произвольного узла, вычисление высоты поддерева и др. делал на InterBase6.


 
Jeer   (2002-10-31 17:59) [8]

Delirium © (31.10.02 16:34)
"Можно, но не всегда эффективно" - пример, пожалуйста

Не точно выразился (пропустил уточнение) - можно построить эквивалент такого запроса использованием двух раздельных SELECT и
обходом дерева на клиенте.
Если SQL engine не имеет таких возможностей.



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

Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
4-69616
Alexander
2002-10-10 07:17
2002.11.21
Вопрос по PChar


14-69501
romych
2002-10-22 12:51
2002.11.21
InDy


1-69342
theEnter
2002-11-12 07:18
2002.11.21
Как узнать что указатель мыши зашел внутрь границ компонента


14-69563
kingdom
2002-11-01 13:52
2002.11.21
Ищу человека! Shamsudin


7-69591
Сергей Ф.В.
2002-09-21 21:58
2002.11.21
Как отследить запуск приложений





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