Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.01 c
2-1150179294
DevilDevil
2006-06-13 10:14
2006.07.02
Почему такая ерунда?


2-1150180812
tvik
2006-06-13 10:40
2006.07.02
работа с Word


15-1149440445
Nic
2006-06-04 21:00
2006.07.02
Простой вопрос


15-1149570044
Иксик
2006-06-06 09:00
2006.07.02
Подмосковье


3-1146807403
seregarem
2006-05-05 09:36
2006.07.02
Изменение поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский