Вниз
Скачать: CL | DM;

Запрос построить   Найти похожие ветки 

← →
rar ©   (2007-01-18 17:53) [0]

Есть таблица РАЗДЕЛЫ иерархической структуры

ID_Tom
Tom
ID_Parent

для коневого узла ID_Parent=0.

Есть подчиненная таблица ХАРАКТЕРИСТИКИ

ID_Character
ID_Tom
NomNumber

необходимо в таблице РАЗДЕЛЫ отобрать данные по условию:

ID_Parent=0;
NomNumber Like"6%"

т.е. выбрать корневые узлы (ID_Parent=0;) которые являются родителем для NomNumber Like"6%".
Можно ли это выбрать одним запросом.
Уф вроде все :-)


← →
Desdechado ©   (2007-01-18 18:20) [1]

СУБД какая?


← →
Johnmen ©   (2007-01-18 18:53) [2]

Так тривиальное соединение
SELECT * FROM РАЗДЕЛЫ, ХАРАКТЕРИСТИКИ
WHERE
(РАЗДЕЛЫ.ID_Tom=ХАРАКТЕРИСТИКИ.ID_Tom) AND
(РАЗДЕЛЫ.ID_Parent=0) AND
(ХАРАКТЕРИСТИКИ.NomNumber Like"6%")


← →
Комбинатор   (2007-01-18 19:25) [3]

SELECT DISTINCT(РАЗДЕЛЫ.ID_Tom) FROM РАЗДЕЛЫ, ХАРАКТЕРИСТИКИ
WHERE
(РАЗДЕЛЫ.ID_Parent=0) AND
(РАЗДЕЛЫ.ID_Tom=ХАРАКТЕРИСТИКИ.ID_Tom) AND
(ХАРАКТЕРИСТИКИ.NomNumber Like"6%")


← →
ANB ©   (2007-01-18 19:40) [4]


> SELECT * FROM РАЗДЕЛЫ, ХАРАКТЕРИСТИКИ
> WHERE
> (РАЗДЕЛЫ.ID_Tom=ХАРАКТЕРИСТИКИ.ID_Tom) AND
> (РАЗДЕЛЫ.ID_Parent=0) AND
> (ХАРАКТЕРИСТИКИ.NomNumber Like"6%")

Дубли


> SELECT DISTINCT(РАЗДЕЛЫ.ID_Tom) FROM РАЗДЕЛЫ, ХАРАКТЕРИСТИКИ
> WHERE
> (РАЗДЕЛЫ.ID_Parent=0) AND
> (РАЗДЕЛЫ.ID_Tom=ХАРАКТЕРИСТИКИ.ID_Tom) AND
> (ХАРАКТЕРИСТИКИ.NomNumber Like"6%")

disticnt спасает, но можно и проще

Однако никак не учитывается, что корень может быть не непосредственным хозяином характеристики. Если это нужно учитывать - то надо раскручивать дерево.

SELECT * FROM РАЗДЕЛЫ
WHERE
РАЗДЕЛЫ.ID_Parent=0 AND
РАЗДЕЛЫ.ID_Tom in
(
select ХАРАКТЕРИСТИКИ.ID_Tom from ХАРАКТЕРИСТИКИ
where ХАРАКТЕРИСТИКИ.NomNumber Like"6%"
)
это без раскрутки дерева.

С раскруткой можно сделать только на оракле.


← →
Комбинатор   (2007-01-18 19:41) [5]


> С раскруткой можно сделать только на оракле.

Sybase))))))


← →
ANB ©   (2007-01-18 20:01) [6]

create table Toms
(
ID_Tom integer,
Tom varchar2(200),
ID_Parent integer
)

create table Characters
(
ID_Character integer,
ID_Tom       integer,
NomNumber    varchar2(200)
)

Запрос с учетом дерева (Оракл) :

select *
 from Toms Tm
where Tm.Id_parent = 0
  and exists (select     1
                    from Toms, characters
                   where characters.Id_tom = Toms.Id_tom
                     and Nomnumber like "6%"
              start with Toms.Id_tom = Tm.Id_tom
              connect by Toms.Id_parent = prior Toms.Id_tom)


← →
ANB ©   (2007-01-18 20:02) [7]


> Sybase))))))

В теме СУБД не указана. Значит пусть ставит оракл и наслаждается :)


← →
rar ©   (2007-01-18 21:25) [8]

СУБД Oracle

Мне надо было получить именно корень

Завтра попробую рекомендации

> ANB ©   (18.01.07 20:01) [6]

Может действительно получу корни

Большое всем спасибо


← →
ANB ©   (2007-01-19 10:28) [9]


> Мне надо было получить именно корень

Мой последный запрос тащит именно корни, если в нем самом или в любой его ветке есть характеристика, начинающаяся с 6.


← →
rar ©   (2007-01-19 18:05) [10]

К сожалению запрос оказался путым :-((


> ANB ©   (18.01.07 20:01) [6]


На его основе написал вот это:

SELECT * from Toms Tm
WHERE Tm.id_Tom IN(SELECT DISTINCT Tm.Id_parent
 from Toms, characters
                  where characters.Id_tom = Toms.Id_tom
                    and Nomnumber like "6%")
start with Tm.Id_parent=0
connect by Tm.Id_tom= PRIOR Tm.Id_parent

он и выдал то что нужно, надеюсь :-), правда работает не быстро, но похоже с деревьями всегда так

Всем Большое  Спасибо



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
2-1173979067
Malik
2007-03-15 20:17
2007.04.08
Вопрос к StringGrid у


2-1174164564
images
2007-03-17 23:49
2007.04.08
Как прочитать загрузочный сектор HDD


4-1164091644
progmax
2006-11-21 09:47
2007.04.08
запуск службы telnet


11-1154795220
NORDmen
2006-08-05 20:27
2007.04.08
string - не более 255 символов в kol программе


15-1173560855
Kerk
2007-03-11 00:07
2007.04.08
Кто по какой причине стал программистом?




   Наверх