Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WHERE не пашет  [new]
Students
Member

Откуда:
Сообщений: 1253
Привет всем! Пишу на MS SQL Server 2008.

вот таблица(укороченный вариант):
ID Status
1 NULL
2 NULL
3 NULL

Вот запрос:
SELECT * FROM Form_ap_Form WHERE (Status IS NULL)
всё работает, выбирает 3 строки.


Далее прописываю
SELECT * FROM Form_ap_Form WHERE (Status <> 'New')
не выбирает ничего, хотя должен выбрать 3 строки. Из-за чего это может быть?
25 май 12, 15:28    [12616048]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Glory
Member

Откуда:
Сообщений: 104751
Students
не выбирает ничего, хотя должен выбрать 3 строки.

Не должно.
Изучать нужно троичную логику
NULL - это особое значение
25 май 12, 15:29    [12616068]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Students
Member

Откуда:
Сообщений: 1253
Ясно.

Скажите, пожалуйста, каким образом мне прописать тогда запрос - "выбери всё, где Status не равен 'New'" ??
25 май 12, 15:31    [12616086]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
status<>'new' or status is null
25 май 12, 15:32    [12616097]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Students
Member

Откуда:
Сообщений: 1253
ясно, спасибо.

Никогда раньше об этом не думал.
25 май 12, 15:33    [12616110]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Penner
Member

Откуда:
Сообщений: 342
ELECT * FROM Form_ap_Form WHERE IsNull(Status,'') <> 'New'
25 май 12, 15:34    [12616116]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Penner
ELECT * FROM Form_ap_Form WHERE IsNull(Status,'') <> 'New'

статус конечно дурацкое поле для индексирования, но на всякий случай замечу, что при такой проверке индексы оптимизатором не используются. при проверке status<>'new' or status is null есть большой шанс, что индекс будет использоваться (если null значений нет в таблице)
25 май 12, 15:37    [12616145]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Students
Member

Откуда:
Сообщений: 1253
Понятно, спасибо за помощь
25 май 12, 15:40    [12616178]     Ответить | Цитировать Сообщить модератору
 Re: WHERE не пашет  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3757
Мистер Хенки
Penner
ELECT * FROM Form_ap_Form WHERE IsNull(Status,'') <> 'New'

статус конечно дурацкое поле для индексирования, но на всякий случай замечу, что при такой проверке индексы оптимизатором не используются. при проверке status<>'new' or status is null есть большой шанс, что индекс будет использоваться (если null значений нет в таблице)


с индексами делается так:
select * FROM Form_ap_Form WHERE Status <> 'New'
union all
select * FROM Form_ap_Form WHERE Status is null
25 май 12, 17:38    [12617319]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить