Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
9-1146876433
TDummyCube
2006-05-06 04:47
2007.04.08
Как найти локальную матрицу, если есть две глобальные?


6-1161367061
Русло
2006-10-20 21:57
2007.04.08
Как из своего приложения запустить подключение к GPRS


15-1173940554
Alkid
2007-03-15 09:35
2007.04.08
Правила русского языка


15-1173709952
Prohodil Mimo
2007-03-12 17:32
2007.04.08
If ... then : Begin End VS Exit;


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский