Главная страница
    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.012 c
3-69157
rom900
2002-10-31 10:20
2002.11.21
Как закрасить ячейки в DBGrid?


3-69204
sunwheel
2002-11-01 14:16
2002.11.21
Переменная вместо имени поля в запросе.


1-69328
DVM
2002-11-12 14:39
2002.11.21
Прозрачные надписи у значков в ListView.


3-69193
b-Ars
2002-10-31 12:10
2002.11.21
Как сделать связь в SQL запросе?


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