В чем разница между! = NULL и IS NOT NULL в выражениях фильтра QGIS?

26

У меня есть слой формы с атрибутом, содержащим NULLзначения, к которым я хотел бы применить фильтр для значений, отличных от NULL.

введите описание изображения здесь

Используя доступный графический интерфейс для такой конструкции запроса, можно интуитивно попробовать

"obj_art" != NULL

введите описание изображения здесь

Что означает «дать мне все функции с атрибутом« obj_art », отличным от NULL» (это число определенно больше 0). Тестирование этого запроса дает странный результат с моей точки зрения:

введите описание изображения здесь

Итак, что я узнал, так это то, что я могу достичь этого, используя

"obj_art" IS NOT NULL

Вопрос в том, в чем разница между != NULLи IS NOT NULL?

Йохен Шварце
источник
Насколько я знаю, это просто синтаксис. Когда пустое использование есть или нет. Иначе используйте = или! =
nielsgerrits
"можно было бы интуитивно попробовать" Правда? Зачем? NULL не является значением. Это буквально отсутствие ценности. Вы не можете "равняться" NULL! Оператор !=не означает «нет»; это означает «не равно». IS NOTозначает «нет», так что я думаю, что это совершенно интуитивно :)
Легкость Гонки с Моникой
@LightnessRacesinOrbit Без понимания того, что NULLэто не является ценностью , я бы сказал , что это интуитивно , чтобы попытаться использовать =или !=как то , как вы оцениваете любое другое значение. Пока вы не узнаете, что NULLэто значение не является интуитивно понятным, IS NOTа не используется !=. Многие не знают, что такое на NULLсамом деле.
Мидавало
И, кроме того, в графическом интерфейсе NULLесть в списке значений (см. Выше), и, следовательно, рассматривается как «нормальное» значение. И кнопки нет IS NULL, или я пропустил такую ​​?! Таким образом, когда мы просто набираем такой запрос со знанием дела, к этому NULLнужно относиться особым образом, мы могли бы обсудить интуицию, но, конечно, не в контексте ЭТОГО GUI.
Йохен Шварц
@Midavalo: Хотя это правда, я бы смиренно предложил не использовать языковую функцию, не выясняя, что это такое :) Программирование с помощью догадок не работает.
Легкость гонки с Моникой

Ответы:

33

Отказ от ответственности: поскольку синтаксис фильтрации в QGIS работает с SQL, я предполагаю, что здесь применяются правила SQL. Я не совсем уверен, правильно ли это, но это кажется логичным и объясняет поведение.


Фильтр работает с SQL, поэтому вы должны искать там ответ.

Короче говоря, при использовании логического оператора в сочетании с null, результат всегда null. Но для проверки nullSQL поставляется с IS (NOT)функцией сравнения, которая позволяет использовать его для предполагаемой фильтрации.

Проверьте ответ Богемиана на stackoverflow для более углубленного обсуждения.

Karpfen
источник
19

NULLэто не значение, поэтому он не может быть равно =или не равно !=ничего. Это не то же самое, что ноль, 0который является значением.

A NULLозначает, что в ячейке, которую вы просматриваете, не было записано никакого значения. Чтобы проверить, существует ли значение, вы спрашиваете ячейку IS NULLилиIS NOT NULL

  • IS NULL проверяет, пуста ли ячейка
  • IS NOT NULL проверяет, не является ли ячейка пустой

Если у вас есть какие - то записи , в которых значения являются One, Two, Threeи все остальное , NULLи вы хотите , чтобы найти все , что не Twoвы должны были бы использовать что - то вроде

value != 'Two' OR value IS NULL

поскольку значения NULL не возвращаются в запросе равно / не равно. Если вы используете только value != 'Three'результат, исключаются все NULLзаписи, так как NULLэто значение не может быть равно или не равно.

Мидавало
источник