![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос.
worldmen © (2006-05-04 18:30:00)Есть запрос. (Oracle)
В одном столбце есть некоторые пустые строки (правильно). Но нужно вместо всех пустых строк подставить определенное значение. Как?
ANB (2006-05-05 16:14:00) [1]
> некорректный с самого начала запрос.
Некоректный вопрос автора !!! Это не к
> Reindeer Moss Eater © (05.05.06 13:13) [21]
ANB (2006-05-05 16:13:00) [2]
> Reindeer Moss Eater © (05.05.06 13:13) [21]
NVL сработал во время выполнения запроса, а если скалярный запрос используется в селековой части, и не вернул строк, то его результат - всегда Null. Можно было бы NVL вынести за скобки и тогда бы он это понял.
Старая грабля и некорректный с самого начала запрос.
Reindeer Moss Eater (2006-05-05 14:34:00) [3]Для Оракла это эквивалентные вещи.
Вставив в таблицу 10 явных нулов и 10 явных пустых строк вы никогда не сочитаете после вставки чего там и сколько.
Будет 20 строк с нулами
Sam Stone (2006-05-05 14:19:00) [4]Может потому что дефолтное значение на строку не null, а '' указано?
Reindeer Moss Eater (2006-05-05 13:13:00) [5]Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.
Остается найти обяснение почему NVL не видел нула в пустом поле открытого соединения.
ANB (2006-05-05 12:16:00) [6]
> Повторюсь, что мы не знаем всех условий задачи, потому остается
> только гадать и предполагать.
Абсолютно прав. Но автор уже решил свою проблему, посему обсуждение предлагаю прекратить.
evvcom (2006-05-05 11:23:00) [7]
> У скалярных запросов и лефт джойна разные области применения.
Согласен, но с областью применения в данном топике мы еще толком и не разобрались.
> А если записей в external_document может быть больше одной ?
Тогда вернется записей больше одной, что, ИМХО, более правильно. А то на каком основании мы решаем, что должна вернуться запись min(ee.bank_mfo)? Почему не max(ee.bank_mfo)? Или вообще какая-нить из середины? В случае нужды всего в одной записи условие выборки соответственно должно быть усложнено.
Повторюсь, что мы не знаем всех условий задачи, потому остается только гадать и предполагать.
ANB (2006-05-05 10:28:00) [8]
> evvcom © (05.05.06 09:53) [17]
А если записей в external_document может быть больше одной ?
У скалярных запросов и лефт джойна разные области применения.
evvcom (2006-05-05 09:53:00) [9]Я бы так и вовсе переделал select from select на select с left join без min, но скорее всего с trim.
ANB (2006-05-05 09:36:00) [10]
> Reindeer Moss Eater © (05.05.06 00:57) [15]
Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.
ЗЫ. Использовать min или max в скалярных запросах оракла - правило хорошего тона.
Reindeer Moss Eater (2006-05-05 00:57:00) [11]select nvl(trim(ee.bank_mfo),'111111')
у тебя там в поле честные пробелы, раз nvl не возвращает '111111'
jack128 (2006-05-05 00:36:00) [12]ANB © (04.05.06 18:46) [5]
Оракл пустые строки прибивает в Null.
Круто!
ANB (2006-05-04 20:33:00) [13]
> worldmen © (04.05.06 19:42) [12]
Странно, что у тебя вообще запрос выполнялся.
worldmen (2006-05-04 19:42:00) [14]Работает. Спасибо > ANB ©
ANB (2006-05-04 19:38:00) [15]Select ...,..,...,
(select nvl(min(ee.bank_mfo),'111111') from external_document ee where d.id = ee.id) MFO,
...,
From
...,
Where
....
worldmen (2006-05-04 19:20:00) [16]Странно, но NVL не работает. Выводит по прежнему пустые строки.
Select ...,..,...,
(select nvl(ee.bank_mfo,'111111') from external_document ee where d.id = ee.id) MFO,
...,
From
...,
Where
....
Как выводило две строки пустые так и выводит.
Попробовал проверить и изменил запрос, вставил:
e.bank_mfo is null
вывело эти две строки, т.е. они равны null
Desdechado (2006-05-04 19:04:00) [17]помни, что для оракла строка нулевой длины (не пробел) равнозначна null
о чем в ANB © (04.05.06 18:46) [5] сказано
worldmen (2006-05-04 19:00:00) [18]Нашел
В Oracle есть функция NVL. Синтаксис NVL(<если значение null>,<заменить на>). К примеру NVL(null,''). Наверное что-то подобное есть в Мускуле. Или ифами проверяй.
worldmen (2006-05-04 18:57:00) [19]
> ANB © (04.05.06 18:47) [6]
А синтаксис у нее какой?
ANB (2006-05-04 18:47:00) [20]
> worldmen © (04.05.06 18:46) [4]
Так бы сразу и сказал
select NVL(Fld1,'Пусто') from Table1