Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вычисляемое поле в запросе? / 8 сообщений из 8, страница 1 из 1
19.03.2004, 12:17
    #32448974
ku
ku
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
Есть таблица:
CREATE TABLE doc (
id INTEGER PRIMARY KEY NOT NULL,
pid INTEGER, -- parent id
path VARCHAR(128) NOT NULL,
descr TEXT
);
CREATE INDEX doc_parent ON doc (pid);

Нужно найти документы, имеющие заданного родителя, а также узнать имеют ли они, в свою очередь, детей.
Можно ли обойтись одним запросом?
--
SELECT id, path, descr, (???) as is_parent FROM doc WHERE pid = 7

Спасибо.
...
Рейтинг: 0 / 0
19.03.2004, 12:27
    #32449011
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
Код: plaintext
1.
2.
3.
4.
SELECT d1.id, d1.path, d1.descr, d2.id, d2.path, d2.descr
FROM doc d1, doc d2
WHERE d1.pid =  7  
  and d1.id = d2.pid(+)
...
Рейтинг: 0 / 0
19.03.2004, 12:38
    #32449038
ku
ku
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
> and d1.id = d2.pid(+)
У док-та может и не быть детей. А что значит (+)?
...
Рейтинг: 0 / 0
19.03.2004, 13:03
    #32449117
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
У док-та может и не быть детей. А что значит (+)?


outer join
...
Рейтинг: 0 / 0
22.03.2004, 08:50
    #32450772
ku
ku
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
select * from doc;
---
id pid path descr
---
1 0 snip SNIP
2 0 gost GOST
3 2 gost/1 GOST_1
4 3 gost/1/1 GOST_1_1
5 2 gost/2 GOST_2

SELECT d1.id, d1.path, d1.descr, d2.pid
FROM doc d1 OUTER JOIN doc d2
WHERE d1.pid = 2 and d1.id = d2.pid;
---
3 gost/1 GOST_1 3

Не хватает:
5 gost/2 GOST_2 ?

След. вариант работает, но не слишком ли криво?
SELECT id, path, descr, 1 as sub FROM doc
WHERE pid = 2 AND id IN (SELECT pid FROM doc)
UNION
SELECT id, path, descr, NULL as sub FROM doc
WHERE pid = 2 AND id NOT IN (SELECT pid FROM doc)
...
Рейтинг: 0 / 0
22.03.2004, 10:25
    #32450894
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
ku
Что хранится в поле Path ? Весь путь от предка до последнего родителя ? Но с другой стороны в приведенном примере меня смутило значение поля Path:
4 3 gost/1/ 1 GOST_1_1
по идее должно быть
4 3 gost/1/ 3 GOST_1_1
Если поле Path действительно хранит то, что я думаю, то обычный LIKE 'ПутьРодителя\%' поможет сделать все, что Вы хотите.
...
Рейтинг: 0 / 0
22.03.2004, 13:34
    #32451366
ku
ku
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
> Если поле Path действительно хранит то, что я думаю,
> то обычный LIKE 'ПутьРодителя\%' поможет сделать все, что Вы хотите.
Да, сперва так и хотел сделать. И хранить просто путь с описанием без всяких id.
Но LIKE 'ПутьРодителя\%' вернёт все подуровни, а мне нужен только один нижний уровень.
...
Рейтинг: 0 / 0
22.03.2004, 13:44
    #32451398
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемое поле в запросе?
I take following results at Oracle 8.1.7:

Код: 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.
CREATE TABLE doc ( 
id INTEGER PRIMARY KEY NOT NULL, 
pid INTEGER,  -- parent id 
 
path VARCHAR( 128 ) NOT NULL, 
descr VARCHAR( 128 )
); 


insert into doc values( 1 ,  0 , 'snip', 'SNIP') 
insert into doc values( 2 ,  0 , 'gost', 'GOST'); 
insert into doc values( 3 ,  2 , 'gost/1', 'GOST_1'); 
insert into doc values( 4 ,  3 , 'gost/1/1', 'GOST_1_1'); 
insert into doc values( 5 ,  2 , 'gost/2', 'GOST_2');

SELECT d1.id, d1.path, d1.descr, d2.id, d2.path, d2.descr
FROM doc d1, doc d2
WHERE d1.pid =  2  
  and d1.id = d2.pid(+) ;

Results:
 3 	gost/ 1 	GOST_1	 4 	gost/ 1 / 1 	GOST_1_1
 5 	gost/ 2 	GOST_2			




...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вычисляемое поле в запросе? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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