![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по синтасису coalesce в оракле
Rule © (2005-07-26 16:41:00)подскажите пожалуйста как сделать вот такой запрос
select coalesce (field1,0) from table1
Синтаксис Оракла требует чтоб второй параметр, в моем случае "0" тоже был полем ...
как обойти
вариант if then не подходит так как в этом случае field1 надо писать два раза, а у меня єто довольно большой подзапрос ....
подскажите пожалуйста ...
Rule (2005-07-26 17:30:00) [41]evvcom © (26.07.05 17:29) [39]
на это и спишем :-), восьмой не может а девятый может :-)
evvcom (2005-07-26 17:29:00) [42]
> Rule © (26.07.05 17:20) [33]
Ладно, не буду про 8 говорить, а в 9 проверил, все работает.
Johnmen (2005-07-26 17:28:00) [43]>evvcom ©
пост [27]
Rule (2005-07-26 17:25:00) [44]evvcom © (26.07.05 17:22) [34]
я ж говорю что в данном случае
INNER JOIN не подходить надо LEFT JOIN а там уже мудрить и получается чем больше таблиц я слева прикрепляю, тем больше они перемнжаются, и тогда использование тех же агрегатов становится нереальным ... помоему геморой
Rule (2005-07-26 17:24:00) [45]Johnmen © (26.07.05 17:22) [35]
сори :-), естественно имел ввиду соединение :-), тоесть джоин
Johnmen (2005-07-26 17:22:00) [46]>Rule © (26.07.05 17:19) [32]
Немного режет слух... Не надо называть "соединение" (JOIN) "объединением" (UNION).
evvcom (2005-07-26 17:22:00) [47]
> поэтому я считаю, что объединять стоит если объединямые
> таблицы большие, именно тогда будет выйгрышь в противном
> случае все только усложняется
Выигрыш будет в любом случае, если оптимизатор не разрулит сам. Вопрос только в том, будет ли он заметен. А насчет усложнения все зависит от того, как ты привык думать. Мне нагляднее обозревать INNER JOIN ... ON, нежели потом в where выискивать по каким же полям там эти таблицы/подзапросы вяжутся? Имхо.
Rule (2005-07-26 17:20:00) [48]evvcom © (26.07.05 17:17) [31]
В данном случае [18] и [21]
я понимаю что на бумаге написано ... но я то руками то сделал вроде все правильно ...
тяжело ошибиться в однострочном запросе, если пишешь их довольно долго уже ...
Rule (2005-07-26 17:19:00) [49]evvcom © (26.07.05 17:12) [26]
кстати там немного не то ... дело в том, что там ты использовал внутреннее объединение, в этом случае у меня будут те записи таблицы, в которых будет присутствовать скидка, в моем случае надо внешнее объединение
evvcom (2005-07-26 17:17:00) [50]
> А что, они должны в данном случае по разу выполнится ?????????
А если на миллион строк выполнить миллион выборок из еще миллиона строк, сколько ж времени потребуется?
А можно сделать одну выборку, потом ее сджойнить еще с одной и получим тот же результат за гораздо меньшее время.
> Johnmen © (26.07.05 17:11) [23]
> >evvcom © (26.07.05 17:09) [21]
>
> Кому же верить, если хочется всем ?
В данном случае [18] и [21]
Rule (2005-07-26 17:16:00) [51]evvcom © (26.07.05 17:12) [26]
я не уверен что так будет быстрее,
я лично уверен, что так объединять стоит если вот те таблицы с которыми клеишь большие, а если они по 3-20 записей, то оптимальнее использовать именно подзапросы (проверено на практике), и ИМХО конечно, но вот такой с подзапросами запрос более читабельный нежели с объединениями ...
поэтому я считаю, что объединять стоит если объединямые таблицы большие, именно тогда будет выйгрышь в противном случае все только усложняется
Rule (2005-07-26 17:15:00) [52]Johnmen © (26.07.05 17:14) [27]
вот и я так попытался объяснить токо не так хорошо получилось ...
Rule (2005-07-26 17:14:00) [53]таблица состоит из одного поля сделал запрос
select coalesce(CARD_NUMBER,'0') from V_BL
тот же результат так что наверное в Oracle8 под другома нежели в 9
Johnmen (2005-07-26 17:14:00) [54]>Rule © (26.07.05 17:11) [24]
Если он это имел в виду, то не учел, что не всегда можно получить желаемое, просто заменив вложенные кореллирующие на соединение. И наоборот.
evvcom (2005-07-26 17:12:00) [55]
> другого выхода тут нет ...
Выход есть всегда. См. http://www.delphimaster.ru/cgi-bin/forum.pl?id=1122378297&n=1, там запрос аналогичен твоему, а в [8] я эти "внутренности" вынес наружу.
Rule (2005-07-26 17:12:00) [56]evvcom © (26.07.05 17:09) [21]
вот щас возьму запросик попроще ... и скажу точно
Rule (2005-07-26 17:11:00) [57]Johnmen © (26.07.05 17:10) [22]
я так понял evvcom © имел ввиду внешнее объединение вместо подзапросов ...
Johnmen (2005-07-26 17:11:00) [58]>evvcom © (26.07.05 17:09) [21]
Кому же верить, если хочется всем ?
Johnmen (2005-07-26 17:10:00) [59]>evvcom © (26.07.05 17:05) [17]
А что, они должны в данном случае по разу выполнится ?????????
Тогда это бред какой-то......
evvcom (2005-07-26 17:09:00) [60]
> Да... Занятно... Отступили-таки...:)
Да нифига не отступили. Нормально оракловый coalesce принимает хоть поле, хоть константу. Проверял только что на 9.2.0.6. И в документации написано 'expression'. Просто "афтар" чего-то напутал.