|
МАКСИМУМ в запросе зашкаливает | ☑ | ||
---|---|---|---|---|
0
sprog
17.01.23
✎
21:49
|
Неожиданно столкнулся со странным поведением запроса.
Если выполнить запрос к пустой таблице (не содержащей результатов) и выбрать максимум от единственного параметра без группировки, то вернётся не пустой результат с 1 строкой этого параметра содержащий ПУСТО. Вот пример: ВЫБРАТЬ ПустаяТаблица.Значение КАК Значение ПОМЕСТИТЬ вт ИЗ &ПустаяТаблица КАК ПустаяТаблица ; ВЫБРАТЬ МАКСИМУМ(вт.Значение) КАК Значение ИЗ вт КАК вт никакие ЕСТЬNULL не помогают. |
|||
1
mikecool
17.01.23
✎
21:51
|
сообщение не согласуется с темой
что не нравится в поведении? так, емнип ,было всегда |
|||
2
Мультук
гуру
17.01.23
✎
22:00
|
(0)
Вот такой запрос выдает NULL, ДА, "Да, это NULL" У тебя твой запрос выдает что-то иное? ВЫБРАТЬ МАКСИМУМ(Номенклатура.Код) КАК Код, МАКСИМУМ(Номенклатура.Код) IS NULL, ЕСТЬNULL(МАКСИМУМ(Номенклатура.Код), "Да, это NULL") ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ 1=0 |
|||
3
hockeyist
17.01.23
✎
22:00
|
(0) А как должно быть по вашему?
|
|||
4
sprog
17.01.23
✎
22:06
|
(3) должен вернуться пустой результат не содержащий данных выборки
|
|||
5
Garykom
гуру
17.01.23
✎
22:21
|
это стандартное поведение
https://ru.stackoverflow.com/questions/749865/sql-maxid-Возвращает-пустой-массив-если-строк-нет |
|||
6
timurhv
17.01.23
✎
22:23
|
(4) И так тоже ничего не должно вернуть?
ВЫБРАТЬ "ТЕСТ" КАК НовоеПоле, МАКСИМУМ(вт.Значение) КАК Значение ИЗ вт КАК вт А если соединения с другими таблицами? |
|||
7
hockeyist
17.01.23
✎
22:55
|
(4)
1. ВЫБРАТЬ Количество(*) что должно вернуть? Пустую выборку или 0? 2. Мы хотим сложить максимум одной таблицы с максимумом другой. Как это сделать при вашей системе? Агрегатные функции всегда что-нибудь да возвращают. Это логично |
|||
8
Said_We
18.01.23
✎
16:52
|
(0) Тогда ещё старый баян...
select 1 where null=null На разных SQL получим разный результат. :-) На MS SQL, Postgre и SQlite вернут пустое множество MySQL вернет 1 Oracle ..... , а что вернет Oracle? :-) |
|||
9
NorthWind
18.01.23
✎
17:12
|
(8) Ошибку. На Oracle нельзя написать запрос без from.
Если написать в соответствии с правилами оракла - select 1 from dual where null=null, то вернет пустое множество. |
|||
10
Said_We
18.01.23
✎
17:14
|
(9) Правильно ошибку. Но если добавить from, то вернет 1 :-)
|
|||
11
NorthWind
18.01.23
✎
17:22
|
(10) нет. Я только что проверял на XE 11. Не возвращает строк.
|
|||
12
Said_We
18.01.23
✎
17:30
|
(11) Тоже проверил. В моей версии вернул 1.
|
|||
13
yopQua
18.01.23
✎
17:36
|
(0) все нормально, так было всегда, иногда это удобно использовать
|
|||
14
Said_We
18.01.23
✎
17:37
|
Причина проста. Спецификация Oracle отличается.
Согласно документации Oracle по NULL, нулевые сравнения с использованием IS NULL или IS NOT NULL вычисляют значение TRUE или FALSE. Однако все остальные сравнения оцениваются как UNKNOWN, а не FALSE. Condition Value of A Evaluation ---------------------------------------- a IS NULL 10 FALSE a IS NOT NULL 10 TRUE a IS NULL NULL TRUE a IS NOT NULL NULL FALSE a = NULL 10 UNKNOWN a != NULL 10 UNKNOWN a = NULL NULL UNKNOWN a != NULL NULL UNKNOWN a = 10 NULL UNKNOWN a != 10 NULL UNKNOWN Но Oracle менялся. И была такая рекомендация. "В Oracle обрабатывает символьное значение с длиной, равной нулю, как null. Однако в будущих версиях это может измениться, и Oracle рекомендует НЕ обрабатывать пустые строки так же, как null.". :-) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |