Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти непосредств.родителя в табл. вложенных множеств / 5 сообщений из 5, страница 1 из 1
01.08.2002, 11:20:23
    #32040184
Alex_Jou
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти непосредств.родителя в табл. вложенных множеств
В таблице-дереве, построенной по принципу вложенных множеств)

id
lft
rgt
name

никак не могу составить запрос, с помощью которого можно было найти непосредственного родителя некоторого узла (:

Мож, хто подскажет?
...
Рейтинг: 0 / 0
01.08.2002, 12:21:03
    #32040218
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти непосредств.родителя в табл. вложенных множеств
id - id обьекта
lft - указатель на что?(предидущего)
rgt - указатель на ?(потомка)
name
или как ,а то простите не понятно
...
Рейтинг: 0 / 0
01.08.2002, 12:27:33
    #32040230
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти непосредств.родителя в табл. вложенных множеств
статья Joe Celko http://sdm.viptop.ru/articles/sqltrees.html
или на http://ib.demo.ru/develop.htm
...
Рейтинг: 0 / 0
01.08.2002, 13:16:56
    #32040258
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти непосредств.родителя в табл. вложенных множеств
Вообще лучше использовать двойную связь лево-право и дитё-папа. Но можно и без последней. В моём примере вычисляеются родители по множественной модели, parent используется только для проверки. Принцип такой - найти все внешнии множества, но что бы не было промежуточных
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
declare @tree table (id int identity, parent int , n varchar( 33 ), le int, ri int)

set nocount on
insert @tree select  0 , 'K', 1 , 16 
insert @tree select  1 , '1', 2 , 13 
insert @tree select  2 , '11', 3 , 4 
insert @tree select  2 , '12', 5 , 12 
insert @tree select  4 , '121', 6 , 7 
insert @tree select  4 , '122', 8 , 9 
insert @tree select  4 , '123', 10 , 11 
insert @tree select  1 , '2', 14 , 15 
   -- посмотреть дерево
 
select t1.le, t1.ri, t1.id, t1.parent,replicate(' ',count(*))+t1.n
  from @tree t1, @tree t2
  where t2.le<=t1.le and t2.ri>=t1.ri
  group by t1.n, t1.le,t1.le, t1.ri, t1.parent,t1.id
  order by t1.le


 -- дети и их родители
 
select t0.id, t.id par, t0.parent 
  from @tree t, @tree t0 
  where t.le<t0.le and t.ri>t0.ri 
    and not exists(select * from @tree t1 
         where t1.le > t.le and t1.le < t0.le
           and t1.ri > t0.ri and t1.ri < t.ri )


...
Рейтинг: 0 / 0
01.08.2002, 14:47:39
    #32040288
Alex_Jou
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти непосредств.родителя в табл. вложенных множеств
Да-да вот сам и придумал: :-)

SELECT TOP 1 e.name AS name,
b.name AS name_prnt,
b.id AS id,
e.id AS id_prnt
FROM tbl AS b, tbl AS e
WHERE b.lft<=e.lft AND e.lft<=b.rgt
AND b.lft<=e.rgt AND e.rgt<=b.rgt
AND e.id<>b.id
AND e.id = 3 -- Id узла, для которого ищем
-- непосредственного начальника
ORDER BY b.rgt - b.lft
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти непосредств.родителя в табл. вложенных множеств / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]