Яка різниця між! = NULL та НЕ NULL у виразах фільтрів QGIS?


26

У мене є шар фігури з атрибутом, що містить NULLзначення, до яких я хотів би застосувати фільтр для значень, відмінних від NULL.

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

Використовуючи доступні gui для такої побудови запитів, можна інтуїтивно постаратися

"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справді.
Midavalo

Крім того, графічний інтерфейс NULLзнаходиться у списку значень (див. Вище), а отже, трактується як "нормальне" значення. А кнопки немає IS NULL, чи я пропустив таку ?! Таким чином, коли ми просто вводимо такий запит і зі знанням, до цього NULLслід звертатися по-особливому, ми могли б обговорити про інтуїцію, але для shure не в контексті ЦЕЙ GUI.
Jochen Schwarze

@Midavalo: Хоча це правда, я б покірно пропонував не використовувати мовну функцію, не шукаючи, що це таке :) Програмування, здогадуючись, не працює.
Гонки легкості з Монікою

Відповіді:


33

Відмова: Оскільки синтаксис фільтрації в QGIS працює з SQL, я припускаю, що тут застосовуються правила SQL. Я не зовсім впевнений, що це цілком правильно, але це здається логічним, але це пояснює поведінку.


Фільтр працює з SQL, тому вам потрібно шукати там відповідь.

Коротше кажучи, при використанні логічного оператора в поєднанні з nullрезультатом завжди є null. Але для того, щоб перевірити null, SQL оснащений IS (NOT)функціоналом порівняння, що дозволяє використовувати його для призначеної фільтрації.

Перевірте відповідь Богема на stackoverflow для більш глибокої дискусії.


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це не значення, яке може бути рівним чи не рівним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.