![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужен аналог "...TABLE_1 left outer join (TABLE_2, TABLE_3) on .. [D6]
Курдль © (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]А что твой оракл такое не кушает? Ну ты бы хоть версию указал. А то телепатить приходится. Восьмерка чтоль?