Was ist der Unterschied zwischen! = NULL und IS NOT NULL in QGIS-Filterausdrücken?

26

Ich habe eine Formebene mit einem Attribut, das NULLWerte enthält , auf die ich einen Filter für andere Werte als anwenden möchte NULL.

Bildbeschreibung hier eingeben

Wenn man die verfügbare GUI für eine solche Abfragekonstruktion verwendet, würde man es intuitiv versuchen

"obj_art" != NULL

Bildbeschreibung hier eingeben

Was bedeutet, 'gib mir alle Features mit dem Attribut "obj_art" anders als NULL' (diese zählen definitiv mehr als 0). Das Testen dieser Abfrage liefert aus meiner Sicht ein seltsames Ergebnis:

Bildbeschreibung hier eingeben

Was ich bisher gelernt habe, ist, dass ich dies mit erreichen kann

"obj_art" IS NOT NULL

Die Frage ist, was ist der Unterschied zwischen != NULLund IS NOT NULL?

Jochen Schwarze
quelle
Soweit ich weiß, handelt es sich nur um Syntax. Wenn null ist oder nicht.
Sonst
"Man würde es intuitiv versuchen" Wirklich? Warum? NULL ist kein Wert. Es ist buchstäblich das Fehlen eines Wertes. Du kannst nicht "gleich" NULL sein! Der Operator !=bedeutet nicht "ist nicht"; es bedeutet "ist nicht gleich". IS NOTbedeutet "ist nicht", also denke ich, dass dies vollkommen intuitiv ist :)
Leichtigkeit Rennen mit Monica
@LightnessRacesinOrbit Ohne das Verständnis, dass dies NULLkein Wert ist, würde ich sagen, es ist intuitiv zu versuchen, zu verwenden, =oder !=so beurteilen Sie jeden anderen Wert. Es ist nicht , bis Sie wissen , dass NULLkein Wert ist , dass es wirklich intuitiv zu bedienen , IS NOTstatt !=. Viele wissen nicht, was NULLwirklich ist.
Midavalo
Außerdem befindet sich die GUI in der Werteliste NULL(siehe oben) und wird daher als "normaler" Wert behandelt. Und es gibt keinen Knopf IS NULL, oder habe ich so etwas verpasst ?! Wenn NULLwir also nur eine solche Abfrage eingeben und mit dem Wissen, dass dies auf besondere Weise behandelt werden muss, könnten wir über Intuition diskutieren, aber sicher nicht im Kontext DIESER GUI.
Jochen Schwarze
@Midavalo: Das stimmt zwar, aber ich würde demütig vorschlagen, kein Sprachfeature zu verwenden, ohne nachzuschauen, was es ist :) Das Programmieren durch Raten funktioniert nicht.
Leichtigkeit Rennen mit Monica

Antworten:

33

Haftungsausschluss: Da die Syntax zum Filtern in QGIS mit SQL funktioniert, gehe ich hier davon aus, dass SQL-Regeln gelten. Ich bin nicht ganz sicher, ob das ganz richtig ist, aber es scheint logisch und erklärt das Verhalten.


Der Filter funktioniert mit SQL, deshalb muss man dort nach einer Antwort suchen.

Kurz gesagt, wenn ein logischer Operator in Kombination mit verwendet wird null, ist das Ergebnis immer null. Zum Testen von nullSQL wird jedoch die IS (NOT)Vergleichsfunktion mitgeliefert, die es ermöglicht , SQL für die beabsichtigte Filterung zu verwenden.

Weitere Informationen finden Sie in Bohemians Antwort zum Stackoverflow.

karpfen
quelle
19

NULList kein Wert, daher kann er nicht gleich =oder nicht gleich sein !=. Es ist nicht die gleiche wie Null , 0das ist ein Wert.

A NULLzeigt an, dass in der angezeigten Zelle kein Wert aufgezeichnet wurde. Um zu überprüfen, ob ein Wert vorhanden ist, fragen Sie, ob die Zelle IS NULLoder ob es vorhanden istIS NOT NULL

  • IS NULL prüft, ob die Zelle leer ist
  • IS NOT NULL prüft, ob die Zelle nicht leer ist

Wenn Sie einige Datensätze, wo a - Werte sind One, Two, Threeund den Rest , NULLund Sie wollen alles finden , die nicht Twomüssten Sie etwas verwenden , wie

value != 'Two' OR value IS NULL

as NULL-Werte werden in einer equals / not equals-Abfrage nicht zurückgegeben. Wenn Sie nur value != 'Three'das Ergebnis verwenden, werden alle NULLDatensätze ausgeschlossen, da dies NULLkein Wert ist, der gleich oder ungleich sein kann.

Midavalo
quelle