Текущее время: Сб, июл 26 2025, 04:12

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 20:58 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
zsap написал:
Code:
WHERE field IS NULL OR field = l_field
Поле field в таблице содержит NULL. Если его перевернуть (WHERE field = l_field OR field IS NULL) - то же самое получается

Ну вы хоть как переворачивайте, но правила булевой алгебры это не изменит ;)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 11:34 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
ArmAnn - В Булевой алгебре только два значения - Истина и Ложь, там нет NULL :)

zsap - могу предположить опять же, что это оптимизация запроса. Обычно, если смотреть план запроса, в таком случае там будет слияние (Oracle так поступает уж точно):
Запрос "разбивается" на две части (для условия OR), а потом результат - слияние того, что получилось. Потому, наверное, и находится результат.

Но для примера можно посмотреть, что будет в том же PLSQL - там точно будет NULL, если первая часть выражения NULL.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 12:12 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
refeline написал:
ArmAnn - В Булевой алгебре только два значения - Истина и Ложь, там нет NULL :)

zsap - могу предположить опять же, что это оптимизация запроса. Обычно, если смотреть план запроса, в таком случае там будет слияние (Oracle так поступает уж точно):
Да оставьте вы оптимизацию в покое...
Выражение вида "(условие_1) ИЛИ (условие_2) ИЛИ (условие_3)" будет отрабатывать одинаково, независимо от порядка следования условий и наличий в них NULLов. И внутри условия вы можете написать "field is NULL" или "NULL is field" (если синтаксис допускает, но не в Open SQL) - опять таки разницы не будет. Оптимизация тут дело десятое, она может влиять на время выполнения запроса, но никак не на результат (про несобранную статистику по индексам не надо пожалуйста:)

refeline написал:
Но для примера можно посмотреть, что будет в том же PLSQL - там точно будет NULL, если первая часть выражения NULL.
Вот объясните мне пожалуйста, как может из условия "field is NULL" получиться NULL?

refeline написал:
Запрос "разбивается" на две части (для условия OR), а потом результат - слияние того, что получилось. Потому, наверное, и находится результат.
вот тут абсолютно правы :)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 14:04 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
ArmAnn написал:
refeline написал:
Но для примера можно посмотреть, что будет в том же PLSQL - там точно будет NULL, если первая часть выражения NULL.
Вот объясните мне пожалуйста, как может из условия "field is NULL" получиться NULL?


Нет, не из этого условия, а из условия
Code:
field = l_field OR l_field IS NULL


при условии, что один из операндов NULL


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 15:21 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
refeline написал:
ArmAnn написал:
Вот объясните мне пожалуйста, как может из условия "field is NULL" получиться NULL?

Нет, не из этого условия, а из условия
Code:
field = l_field OR l_field IS NULL

при условии, что один из операндов NULL
NULL - это всего лишь одно из возможных значений, пусть и несколько специфичное.
А логическое условие - оно либо истинно либо ложно, про нечеткую логику язык SQL ничего не знает :)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 15:25 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Нашел ответы вот тут http://en.wikipedia.org/wiki/Null_(SQL)
в целом вывод такой
Цитата:
The SQL:1999 standard does not define how to deal with this inconsistency, and results could vary between implementations.


Конкретно по Oracle здесь http://www.sql.ru/forum/actualthread.aspx?tid=33297


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Чт, ноя 03 2011, 15:56 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
В общем, мы пришли к выводу, что SQL в виду своих соображений считает выражение "NULL OR TRUE" истинным. Несколько лет работал с БД, а о таком не задумывался :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB