Форум: "Базы";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизЗапрос построить Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c