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

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

SQL-запрос.


Страницы:   1 2

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


Страницы:   1 2

Наверх

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