Ich habe eine Formebene mit einem Attribut, das NULL
Werte enthält , auf die ich einen Filter für andere Werte als anwenden möchte NULL
.
Wenn man die verfügbare GUI für eine solche Abfragekonstruktion verwendet, würde man es intuitiv versuchen
"obj_art" != NULL
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:
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 != NULL
und IS NOT NULL
?
!=
bedeutet nicht "ist nicht"; es bedeutet "ist nicht gleich".IS NOT
bedeutet "ist nicht", also denke ich, dass dies vollkommen intuitiv ist :)NULL
kein 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 , dassNULL
kein Wert ist , dass es wirklich intuitiv zu bedienen ,IS NOT
statt!=
. Viele wissen nicht, wasNULL
wirklich ist.NULL
(siehe oben) und wird daher als "normaler" Wert behandelt. Und es gibt keinen KnopfIS NULL
, oder habe ich so etwas verpasst ?! WennNULL
wir 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.Antworten:
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 immernull
. Zum Testen vonnull
SQL wird jedoch dieIS (NOT)
Vergleichsfunktion mitgeliefert, die es ermöglicht , SQL für die beabsichtigte Filterung zu verwenden.Weitere Informationen finden Sie in Bohemians Antwort zum Stackoverflow.
quelle
NULL
ist kein Wert, daher kann er nicht gleich=
oder nicht gleich sein!=
. Es ist nicht die gleiche wie Null ,0
das ist ein Wert.A
NULL
zeigt an, dass in der angezeigten Zelle kein Wert aufgezeichnet wurde. Um zu überprüfen, ob ein Wert vorhanden ist, fragen Sie, ob die ZelleIS NULL
oder ob es vorhanden istIS NOT NULL
IS NULL
prüft, ob die Zelle leer istIS NOT NULL
prüft, ob die Zelle nicht leer istWenn Sie einige Datensätze, wo a - Werte sind
One
,Two
,Three
und den Rest ,NULL
und Sie wollen alles finden , die nichtTwo
müssten Sie etwas verwenden , wievalue != '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 alleNULL
Datensätze ausgeschlossen, da diesNULL
kein Wert ist, der gleich oder ungleich sein kann.quelle