Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
Имеется таблица (типа дерево)
IDID_PARENTNAME
10ROOT1
20ROOT2
41CHILD1
51CHILD2
72CHILD4
82CHILD5
103CHILD7
113CHILD8
131CHILD10
Как из этой таблицы выбрать только узлы определенного уровня ?
Корневые это понятно где ID_PARENT = 0 а как выбрать записи, например, второго или третьего уровня ?
3 янв 13, 17:38    [13719743]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
Мне это надо сделать одни запросом
3 янв 13, 17:43    [13719772]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
qwerty112
Guest
Дерево++,

;with cte as (
select * , 1 as [level]
from @t
where ID_PARENT=0

union all

select t.*, cte.[level]+1
from @t t inner join cte on cte.ID=t.ID_PARENT)

select * from cte where [level]=2
3 янв 13, 18:06    [13719886]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
Спасибо, а более универсального способа нет ? Потому что уровень может не ограничиться вторым или третьим. И без всяких with стандартным SQL чтобы запрос работал в ACCESS.
3 янв 13, 18:26    [13719946]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
qwerty112
Guest
Дерево++
Спасибо, а более универсального способа нет ? Потому что уровень может не ограничиться вторым или третьим.

это - универсальный,
"Потому что уровень" - пох

Дерево++
И без всяких with стандартным SQL чтобы запрос работал в ACCESS.

не ту ты задачку выбрал, для меж-СУБД-стандартизации :))
3 янв 13, 18:29    [13719955]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
qwerty112,

я не понял последнюю фразу другими словами изложите пожалуйста
3 янв 13, 18:32    [13719962]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31985
Дерево++
qwerty112,

я не понял последнюю фразу другими словами изложите пожалуйста
Универсальный SQL выборку уровней дерева на струкруте ID - ID_PARENT не поддерживает.
3 янв 13, 18:37    [13719968]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
я не понял последнюю фразу другими словами изложите пожалуйста
Другими словами - работа с деревьями очень сильно зависит от используемой СУБД
3 янв 13, 18:37    [13719970]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
ясно, спасибо. хотел выкинуть поле LEVEL
3 янв 13, 18:42    [13719980]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
qwerty112
Guest
Дерево++
qwerty112,

я не понял последнюю фразу другими словами изложите пожалуйста

нуу, попробую:
- до 2005, и в МС СКЛ "разбора" дерева произвольной глубины, одним запросом, не было как такового
- в Акцессе - нет и не "планируется"
- в Му СКЛ, тоже вроде как - нет, хотя вот тут 13674855 вроде бы как что-то изобрели с переменными

т.е. в каждой СУБД этот вопрос (разбор дерева произвольной глубины) решается "по-своему", и то - если решается
"специфический" он очень, вот ...
3 янв 13, 18:44    [13719983]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Дерево++
Guest
qwerty112,

спс, будем знать
3 янв 13, 19:13    [13720073]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Дерево++
Спасибо, а более универсального способа нет ? Потому что уровень может не ограничиться вторым или третьим. И без всяких with стандартным SQL чтобы запрос работал в ACCESS.
CTE - это часть стандарта ANSI SQL-1999
Про Access мне сказать нечего.
3 янв 13, 19:25    [13720118]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать из таблицы-дерева записи определенноо уровня  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
В асесе лучше всего добавить в таблицу для храния узлов дерева поле "полный адрес" в котором хранить путь узла до самого верха в виде айдишников разделенных спецсимволом. Его придется пересчитывать при переносе веток, но с ним все задачи поика всех родителей до верха, всех потомков вниз и т.п. решаются простейшим лайком. В аксесе я работал с деревьями именно за счет этого трюка.
3 янв 13, 22:10    [13720675]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить