Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужен аналог "...TABLE_1 left outer join (TABLE_2, TABLE_3) on .. [D6]


Страницы:   1 2

Курдль ©   (2005-12-12 16:48:00) 

Приветствую!
С привеликим удовольствием вернулся к Ораклу, но многое уже подзабыл.
Сейчас переделываю проект под Оракл. Есть конструкции, которые не поддаются изящной трансформации. Например, внешние соединения основной таблицы с групой подчиненных вида

"...from T1 left outer join (T2, T3) on T3.T2_ID = T2.T2_ID and T2.T1_ID = T1.T1_ID"

Как бы это адаптировать под оракл?


evvcom   (2005-12-13 09:01:00) [21]


> "...from T1 left outer join (T2, T3) on T3.T2_ID = T2.T2_ID
> and T2.T1_ID = T1.T1_ID"

Максимально похоже:
"...from T1 left outer join (T2 inner join T3 on T3.T2_ID = T2.T2_ID) on T2.T1_ID = T1.T1_ID"


Vlad   (2005-12-12 18:39:00) [22]


> Курдль ©   (12.12.05 17:44) [8]
>
> в набор данных попадут записи из таблицы b независимо от
> содержимого таблиц c и d.
> А если ты внимательно посмотрел мой исходный запрос - там
> сначала делается выборка из таблиц Т2, Т3 по определенному
> условию и только полученный результат внешне соединяется
> с Т1.

Я вобще не заморачивался с тем, что там куда попадет, а просто привел тебе пример конструкции с внешним join-ом.


> У меня задача - запросы максимально приближать к ANSI.


Практика показывает, что бесполезная трата времени и сил. При переходе на другую СУБД все равно многое править приходится.


ANB   (2005-12-12 17:57:00) [23]


> На делфях бы так не удалось :)

А на чем писали ?


Курдль   (2005-12-12 17:52:00) [24]


> ANB ©   (12.12.05 17:42) [7]
>
>
> > Курдль ©   (12.12.05 17:35) [6]
>
> Вот говорил же я, что писать универсальные программы под
> любые СУБД - жуткий геморрой. :)


Программа писалась под сайбэйс, но с оглядкой, что возможен переход на другую СУБД. И вот оно свершилось.
Кстати, не так уж страшен черт, как его малютка! Огромный проект из нескольких сотен файлов исходника без особого труда переведен с сайбэйса на оракл.
Осталось поменять в запросах DateFormat на ToChar, IsNull на NVL и т.п. по мелочам. На делфях бы так не удалось :)


ANB   (2005-12-12 17:49:00) [25]


> Курдль ©   (12.12.05 17:44) [8]

Запихать связку T2 и T3 во вложенный запрос во from


Курдль   (2005-12-12 17:44:00) [26]


> А вобще, в Оракле outer join делается прям в условии where


У меня задача - запросы максимально приближать к ANSI.

В твоем примере

> where
>  a.id = b.id(+) and c.id = d.id(+)

в набор данных попадут записи из таблицы b независимо от содержимого таблиц c и d.
А если ты внимательно посмотрел мой исходный запрос - там сначала делается выборка из таблиц Т2, Т3 по определенному условию и только полученный результат внешне соединяется с Т1.


ANB   (2005-12-12 17:42:00) [27]


> Курдль ©   (12.12.05 17:35) [6]

Вот говорил же я, что писать универсальные программы под любые СУБД - жуткий геморрой. :)


Курдль   (2005-12-12 17:35:00) [28]


> не знаю, как насчет группового соединения, но можно нормально
> и по одному раскидать


Это понятно, что можно раскидать. Но если запрос рабочий и занимает машинописный лист, то раскидывать в нем нечто - весьма опасно. Вот я сначала и пытаюсь найти возможность просто максимально адаптировать его.


Vlad   (2005-12-12 17:31:00) [29]

Курдль ©   (12.12.05 17:08) [2]

в девятке left outer join поддерживается. Но не уверен что такую конструкцию скушает
left outer join (T2, T3)
скорее всего по одной таблице джоинить надо.
А вобще, в Оракле outer join делается прям в условии where

where
 a.id = b.id(+) and c.id = d.id(+)

см. доки по (+)


ANB   (2005-12-12 17:31:00) [30]


> Курдль ©   (12.12.05 16:48)

Или поставь плюсики в связках (в where). И не парься.
ЗЫ. Тогда и на 8 работать будет.


Desdechado   (2005-12-12 17:16:00) [31]

а Language Reference почитать?

не знаю, как насчет группового соединения, но можно нормально и по одному раскидать


Курдль   (2005-12-12 17:08:00) [32]

Версия - девятка.
Ругается на скобки, если их убрать - ругается на отсутствие ключевого слова (спотыкается об запятую).


evvcom   (2005-12-12 16:56:00) [33]

А что твой оракл такое не кушает? Ну ты бы хоть версию указал. А то телепатить приходится. Восьмерка чтоль?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо