Текущее время: Пт, июл 25 2025, 05:55

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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