Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

SQL-запрос.   Найти похожие ветки 

 
worldmen ©   (2006-05-04 18:30) [0]

Есть запрос. (Oracle)
В одном столбце есть некоторые пустые строки (правильно). Но нужно вместо всех пустых строк подставить определенное значение. Как?


 
ANB ©   (2006-05-04 18:42) [1]

update Table1 set Fld1 = "Значение" where Fld1 is null


 
jack128 ©   (2006-05-04 18:44) [2]

видимо, что то типа этого:

update MyTable
set
 MyField = ""
where
 MyField = :OldMyField


 
jack128 ©   (2006-05-04 18:45) [3]

jack128 ©   (04.05.06 18:44) [2]
в смысле наоборот :-)

update MyTable
set
MyField = :OldMyField
where
 MyField = ""

ANB ©   (04.05.06 18:42) [1]
смотря что считать пустыми строками :-)


 
worldmen ©   (2006-05-04 18:46) [4]

> ANB
Мне нужно не в базе изменить, а в отчете так вывести. при том, что в базе ничего не измениться.


 
ANB ©   (2006-05-04 18:46) [5]


> update MyTable
> set
> MyField = :OldMyField
> where
>  MyField = ""

Не отработает. Оракл пустые строки прибивает в Null.


 
ANB ©   (2006-05-04 18:47) [6]


> worldmen ©   (04.05.06 18:46) [4]

Так бы сразу и сказал

select NVL(Fld1,"Пусто") from Table1


 
worldmen ©   (2006-05-04 18:57) [7]


> ANB ©   (04.05.06 18:47) [6]

А синтаксис у нее какой?


 
worldmen ©   (2006-05-04 19:00) [8]

Нашел
В Oracle есть функция NVL. Синтаксис NVL(<если значение null>,<заменить на>). К примеру NVL(null,""). Наверное что-то подобное есть в Мускуле. Или ифами проверяй.


 
Desdechado ©   (2006-05-04 19:04) [9]

помни, что для оракла строка нулевой длины (не пробел) равнозначна null
о чем в ANB ©   (04.05.06 18:46) [5] сказано


 
worldmen ©   (2006-05-04 19:20) [10]

Странно, но 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


 
ANB ©   (2006-05-04 19:38) [11]

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:42) [12]

Работает. Спасибо > ANB ©


 
ANB ©   (2006-05-04 20:33) [13]


> worldmen ©   (04.05.06 19:42) [12]

Странно, что у тебя вообще запрос выполнялся.


 
jack128 ©   (2006-05-05 00:36) [14]

ANB ©   (04.05.06 18:46) [5]
Оракл пустые строки прибивает в Null.

Круто!


 
Reindeer Moss Eater ©   (2006-05-05 00:57) [15]

select nvl(trim(ee.bank_mfo),"111111")

у тебя там в поле честные пробелы, раз nvl не возвращает "111111"


 
ANB ©   (2006-05-05 09:36) [16]


> Reindeer Moss Eater ©   (05.05.06 00:57) [15]

Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.

ЗЫ. Использовать min или max в скалярных запросах оракла - правило хорошего тона.


 
evvcom ©   (2006-05-05 09:53) [17]

Я бы так и вовсе переделал select from select на select с left join без min, но скорее всего с trim.


 
ANB ©   (2006-05-05 10:28) [18]


> evvcom ©   (05.05.06 09:53) [17]

А если записей в external_document  может быть больше одной ?
У скалярных запросов и лефт джойна разные области применения.


 
evvcom ©   (2006-05-05 11:23) [19]


> У скалярных запросов и лефт джойна разные области применения.

Согласен, но с областью применения в данном топике мы еще толком и не разобрались.

> А если записей в external_document  может быть больше одной ?

Тогда вернется записей больше одной, что, ИМХО, более правильно. А то на каком основании мы решаем, что должна вернуться запись min(ee.bank_mfo)? Почему не max(ee.bank_mfo)? Или вообще какая-нить из середины? В случае нужды всего в одной записи условие выборки соответственно должно быть усложнено.
Повторюсь, что мы не знаем всех условий задачи, потому остается только гадать и предполагать.


 
ANB ©   (2006-05-05 12:16) [20]


> Повторюсь, что мы не знаем всех условий задачи, потому остается
> только гадать и предполагать.

Абсолютно прав. Но автор уже решил свою проблему, посему обсуждение предлагаю прекратить.


 
Reindeer Moss Eater ©   (2006-05-05 13:13) [21]

Раз помог min, у него там не честные пробелы, а нет записей в таблице external_document по указанному условию.

Остается найти обяснение почему NVL не видел нула в пустом поле открытого соединения.


 
Sam Stone ©   (2006-05-05 14:19) [22]

Может потому что дефолтное значение на строку не null, а "" указано?


 
Reindeer Moss Eater ©   (2006-05-05 14:34) [23]

Для Оракла это эквивалентные вещи.
Вставив в таблицу 10 явных нулов и 10 явных пустых строк вы никогда не сочитаете после вставки чего там и сколько.
Будет 20 строк с нулами


 
ANB ©   (2006-05-05 16:13) [24]


> Reindeer Moss Eater ©   (05.05.06 13:13) [21]

NVL сработал во время выполнения запроса, а если скалярный запрос используется в селековой части, и не вернул строк, то его результат - всегда Null. Можно было бы NVL вынести за скобки и тогда бы он это понял.

Старая грабля и некорректный с самого начала запрос.


 
ANB ©   (2006-05-05 16:14) [25]


> некорректный с самого начала запрос.

Некоректный вопрос автора !!! Это не к
> Reindeer Moss Eater ©   (05.05.06 13:13) [21]



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.04 c
15-1149641654
tButton
2006-06-07 04:54
2006.07.02
радио


2-1150270186
novill
2006-06-14 11:29
2006.07.02
Надо написать прогу в виде службы Windows. С чего начать?


3-1146422646
Yaros-hoi
2006-04-30 22:44
2006.07.02
Относительные и абсолютные пути


3-1146898813
arhis
2006-05-06 11:00
2006.07.02
Удаление записей в АДО


2-1149830887
VitV
2006-06-09 09:28
2006.07.02
DBGrid перенос строк