Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

А с таким запросом как?   Найти похожие ветки 

 
}|{yk ©   (2004-04-19 14:20) [0]

В оракле делаю так
SELECT a.set_id, a.mem_id, a.mem_pid, b.mem_name
 FROM cust1_tree a,cust1 b,cust1 c
 where a.mem_id=b.mem_id and a.mem_pid=c.mem_id(+)
 order by a.mem_pid,a.mem_order

(+) - чтобы выводились и корневые элементы, не имеющие родителей
(+) в Interbase нет, чем его можно заменить?


 
Danilka ©   (2004-04-19 14:26) [1]

outer join. вообще-то в документашке по ороклу так и написано, что (+) это и есть outer join :))


 
Соловьев ©   (2004-04-19 14:27) [2]


> }|{yk ©   (19.04.04 14:20)  

как ты различаешь корни? у меня там в родителе NULL - вот я и ставлю условие чтобы и эти выводить
и еще раз - http://www.ibase.ru/develop.htm


 
}|{yk ©   (2004-04-19 14:31) [3]

а как тут outer join применишь?


 
Danilka ©   (2004-04-19 14:32) [4]

вообще, если пользуешься ibexpert-ом, то у него есть такая фича - построитель запросов.
выбираешь таблицы, соединяешь их поля, выбираешь типы соединений, а он тебе говорит запрос.
по-началу, когда переходишь с орокла все эти джойны напрягают. :)


 
Danilka ©   (2004-04-19 14:34) [5]

[3] }|{yk ©   (19.04.04 14:31)
честно говоря, лениво запрос писать - я еще сам напрягаюсь с этими джойнами, да и проверить под рукой базы фиребирдовской нет. :))


 
Johnmen ©   (2004-04-19 14:43) [6]

...FROM A LEFT JOIN B ON A.ID=B.ID...
соответствует
...FROM A,B WHERE A.ID(+)=B.ID...

И вообще, это Оракул извратился над стандартным синтаксисом...


 
Vlad ©   (2004-04-19 14:52) [7]


> И вообще, это Оракул извратился над стандартным синтаксисом...

Но в Оракуле так же оставлен и стандартный синтаксис


 
Курдль ©   (2004-04-19 14:53) [8]


> И вообще, это Оракул извратился над стандартным синтаксисом...

Иногда стандартного синтаксиса не хватает. Sybase, например, для этих целей использует TransactSQL, в нем бы числилось WHERE A.ID *= B.ID
Но это не для того, чтобы помочь ленивым в записи "...outer join", - просто многие условия стандартным языком не описать.
Например:

WHERE A.ID(+)= B.ID
AND B.ID(+)= C.ID
AND C.ID(+)= D.ID
AND D.ID(+)= E.ID
AND E.ID(+)= F.ID


 
Johnmen ©   (2004-04-19 14:54) [9]

>Но в Оракуле так же оставлен и стандартный синтаксис

В 8 версии разве есть JOIN ?
:)


 
}|{yk ©   (2004-04-19 14:56) [10]

Дык... Непонятно
как же это-то запрос переписать под Interbase?
Ведь здесь хотя и объединяются 2 таблицы, но соединение не 1, а 2 - в таблице cust1 хранятся объекты, а в cust1_tree - связи


 
sniknik ©   (2004-04-19 14:58) [11]

Johnmen ©   (19.04.04 14:43) [6]
> И вообще, это Оракул извратился над стандартным синтаксисом...
не только он в Perwasive вместо LEFT JOIN есть =+ (или наоборот +=), почти оракул только без скобочек. ;)


 
Vlad ©   (2004-04-19 14:59) [12]


> Johnmen ©   (19.04.04 14:54) [9]

Есть и join и outer join :-)


 
Johnmen ©   (2004-04-19 15:00) [13]

>многие условия стандартным языком не описать.
>Например:
>WHERE A.ID(+)= B.ID
>AND B.ID(+)= C.ID
>AND C.ID(+)= D.ID
>AND D.ID(+)= E.ID
>AND E.ID(+)= F.ID

FROM A
LEFT JOIN B ON B.ID= A.ID
LEFT JOIN C ON C.ID= B.ID
LEFT JOIN D ON D.ID= C.ID
LEFT JOIN E ON E.ID= D.ID
LEFT JOIN F ON F.ID= E.ID
:)


 
DenK_vrtz ©   (2004-04-19 15:02) [14]

с девятки есть join и outer join :)


 
Johnmen ©   (2004-04-19 15:02) [15]

>Vlad ©   (19.04.04 14:59) [12]
>Есть и join и outer join :-)

По-моему, ты вводишь старого склеротика в заблуждение...(<=8 версия)
:)


 
Курдль ©   (2004-04-19 15:05) [16]


> но соединение не 1, а 2 - в таблице cust1 хранятся объекты,
> а в cust1_tree - связи

Вы чего-то не договариваете! Если условие в исходном запросе не усечено:

where a.mem_id=b.mem_id and a.mem_pid=c.mem_id(+)
order by a.mem_pid,a.mem_order

то содержать лишнюю таблицу для поддержки древовидной связи бессмысленно - проще сделать свяь в единственной таблице один-ко-многим на саму себя.


 
Danilka ©   (2004-04-19 15:05) [17]

[15] Johnmen ©   (19.04.04 15:02)
в восьмерке на самом деле нет.

[6] Johnmen ©   (19.04.04 14:43)
на самом деле этого достаточно? может left outer join?


 
}|{yk ©   (2004-04-19 15:11) [18]

>то содержать лишнюю таблицу для поддержки древовидной связи
>бессмысленно - проще сделать свяь в единственной таблице
>один-ко-многим на саму себя.

Кроме того в этой таблице храняться идентификаторы версий - есть различные иерархии элементов. Элементы могут входить в различные иерархии (удобно, чтобы не добавлять новые поля, а просто добавлять новую иерархию и добавлять существующие элементы в новую иерархию).
Но данной конкретной таблице иерархия пока одна, потому в запросе я ее пропустил


 
Johnmen ©   (2004-04-19 15:13) [19]

>Danilka ©   (19.04.04 15:05) [17]

[INNER] JOIN | {LEFT | RIGHT | FULL } [OUTER]} JOIN


 
Соловьев ©   (2004-04-19 15:15) [20]


> }|{yk ©   (19.04.04 15:11) [18]

http://www.ibase.ru/develop.htm


 
Danilka ©   (2004-04-19 15:21) [21]

[19] Johnmen ©   (19.04.04 15:13)
понятно.
значит, лишнего писал, эх блин! :))


 
Курдль ©   (2004-04-19 15:26) [22]

Кстати, если Ваша цель построить "дерево", то какие дальнейшие планы? Ну, получите набор данных вида:
а1 - в2
а1 - в3
а2 - в5
а2 - в6
а3 - в7
а3 - в8
а9 - в10
...
И что дальше? На клиенте будете дерево строить? Так не лучше ли просто взять 2 НД - cust1_tree и cust1, чтобы просто построить дерево в памяти и не мучать сервер многократным выбором одних и  тех же значений?


 
}|{yk ©   (2004-04-19 15:29) [23]

Вот так вот
SELECT a.set_id, a.mem_id, a.mem_pid, b.mem_name CHILD_NAME,c.mem_name PARENT_NAME
 FROM cust1_tree a
 left join cust1 b
 ON (a.mem_id=b.mem_id)
 left join cust1 c
 ON (a.mem_pid=c.mem_id)
Работает правильно


 
}|{yk ©   (2004-04-19 15:34) [24]

когда я построю такле дерево, то 1 (!) запросом я построю дерево, и построение его на клиенте будет занимать только 1 проход по созданному запросу


 
Vlad ©   (2004-04-19 15:41) [25]

хм... действительно, поглядел в интернете, везде написано что left join в 8i не поддерживается. Однако у меня довольно очетливо осталось в памяти, что сам лично пользовался такой конструкцией на 8-м Оракле.... Переутомился наверное....


 
Курдль ©   (2004-04-19 16:06) [26]


> 1 (!) запросом я построю дерево

Вы не построите дерево! А лишь список связей "предок-потомок". Причем размер НД увеличится, кратно степени иерархии.



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.063 c
1-1083298153
alexX
2004-04-30 08:09
2004.05.16
listview


11-1068700287
Ciber SLasH
2003-11-13 08:11
2004.05.16
Есть ли в KOL компонент типа TImage


1-1083078463
.Lex
2004-04-27 19:07
2004.05.16
Как отловить Error в программе?


6-1080234424
rezya
2004-03-25 20:07
2004.05.16
Проблема с неблокирующими сокетами.


3-1082356165
clover
2004-04-19 10:29
2004.05.16
Где можно скачать последнюю версию IBForms?