2015-08-06 3 views
1

У меня есть запрос, в котором я хочу исключить результаты, когда определенное поле имеет определенное текстовое значение. Однако я не хочу исключать пробелы или другие ценности.Фильтр запросов доступа Не фильтр исключает пробелы

Это то, что я сделал: Полевого Critera: Не «при сохранении здоровья»

Когда я запускаю этот запрос, он успешно исключает при сохранении здоровья, но также исключает все пустые поля. Любые решения для этого?

ответ

0

Ваш запрос возвращает только те строки, где условие, [Field A] <> "Healthspan", имеет значение True. Однако, когда [Field A] является Null, условие оценивается как Null, а не True, так что строка исключена.

+--------------+-----------------+ 
| Field A  | <> "Healthspan" | 
+--------------+-----------------+ 
| "Healthspan" | False   | 
+--------------+-----------------+ 
| "foo"  | True   | 
+--------------+-----------------+ 
| Null   | Null   | 
+--------------+-----------------+ 

Добавить второе условие с OR включить эти строки со значениями Null [Field A]:

SELECT y.* 
FROM YourTable AS y 
WHERE 
     y.[Field A] <> "Healthspan" 
    OR y.[Field A] Is Null; 
+0

Это сработало спасибо! –

+0

Чтобы поощрять доступ к использованию индексов, вы избегаете помещать поле в качестве аргумента функции. поэтому ваш первый код, скорее всего, будет работать быстрее. – HarveyFrench

+0

В ретроспективе, я думаю, я должен был остановиться только с первым примером запроса. Исправлено. – HansUp

0

Вы должны использовать функцию IsNull().

Not "Healthspan" OR IsNull([tblTableName].[Field A])=True 

Вы найдете функцию IsNull() очень удобной.

+0

Любопытно, есть ли разница между использованием формулы выше и помещением «Is Null» в критерии для поля? –

+0

Да, IsNull() немного медленнее, так как это вызов функции. Разница в скорости только заметна, если у вас есть большая база данных. Хорошей выгодой является то, что IsNull() также можно использовать в коде VBA. Но лучше всего, если у вас есть другие сложные критерии или вызовы функций внутри SQL-запроса, IsNull() может быть вашим единственным регрессом внутри этих других функций. Однако в вашем случае «Null» считается лучшим решением, поскольку оно является родным для кода SQL. Просто имейте в виду, что IsNull() может помочь спасти вас от многих других головных болей, которые «Null» не могут. В противном случае они действуют одинаково. – abraxascarab