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

Вниз

Знатокам 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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.009 c
7-69602
antonioxxx
2002-09-13 23:35
2002.11.21
Где установлен Windows?


4-69626
Tihas
2002-10-10 01:33
2002.11.21
Если какой способ копировать элементы управления, допустим меню


1-69390
Roman_Tutov
2002-11-10 13:06
2002.11.21
Многооконное приложение


14-69572
Cr@sh
2002-11-04 16:06
2002.11.21
Помогите с СофтАйсом.


6-69468
Azbul
2002-09-26 10:33
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский