Страница 1 из 1

Вопрос по деревьям - запрос выборки

Добавлено: 24 май 2006, 17:11
Zhur
Уважаемые.
Прочитал статью "Деревья в SQL".
В статье описана рекурсивная процедура, возвращающая для родительского узла все его дочерниеузлы.
Таким образо, что бы выбрать из таблицы эти узлы пишем запрос:

Код: Выделить всё

select A.* from MYTABLE A
join MYTABLE_CHILD(:ID,1) AC on A.ID=AC.ID
Появилась проблема следующего характера:
Как быбрать из всей таблицы узлы, наоборот, не принадлежащие это узлу (:ID)???
Сейчас написал так:

Код: Выделить всё

select A.* from MYTABLE A
where not A.ID in
  (select AC.ID from MYTABLE_CHILD(:ID,1) AC)
Очевидно, что такой запрос является гипер-медленным.
Может у кого есть идея, как оптимизировать данный запрос?
Заранее благодарен.

Добавлено: 25 май 2006, 07:58
Dimitry Sibiryakov
Если тебе нужны выборки такого характера, я бы рекомендовал дерево с составным ключом. Там подобные запросы делаются влет с помощью LIKE.

Добавлено: 25 май 2006, 15:26
Zhur
Dimitry Sibiryakov писал(а):Если тебе нужны выборки такого характера, я бы рекомендовал дерево с составным ключом. Там подобные запросы делаются влет с помощью LIKE.
А гд можно про это почитать поподробнее?

Добавлено: 25 май 2006, 15:34
Dimitry Sibiryakov
А статью "Деревья в SQL" ты прочитал только ровно на треть?

Добавлено: 25 май 2006, 15:44
Zhur
Dimitry Sibiryakov писал(а):А статью "Деревья в SQL" ты прочитал только ровно на треть?
Ах... Вы имели в виду "Составной путь"?
Возможно, это может мне подойти... Надо обдумать все за и против.
Правда, мне придется кое-что сделать по другому.
Что ж спасибо. Что-то сразу не подумал.