Qual è la differenza tra! = NULL e IS NOT NULL nelle espressioni del filtro QGIS?


26

Ho un livello forma con un attributo che contiene NULLvalori a cui vorrei applicare un filtro per valori diversi da NULL.

inserisci qui la descrizione dell'immagine

Utilizzando la GUI disponibile per tale costruzione di query, si proverebbe intuitivamente

"obj_art" != NULL

inserisci qui la descrizione dell'immagine

Il che significa 'dammi tutte le funzionalità con attributo "obj_art" diverso da NULL' (questi contano sicuramente più di 0). Testare questa query produce uno strano risultato dal mio punto di vista:

inserisci qui la descrizione dell'immagine

Quindi quello che ho imparato finora è che posso farlo usando

"obj_art" IS NOT NULL

La domanda è: qual è la differenza tra != NULLe IS NOT NULL?


Per quanto ne so è solo sintassi. Quando null use è o no. Altro uso = o! =
nielsgerrits il

"uno proverebbe intuitivamente" Davvero? Perché? NULL non è un valore. È letteralmente l'assenza di un valore. Non puoi "eguagliare" NULL! L'operatore !=non significa "non è"; significa "non è uguale a". IS NOTsignifica "non è", quindi penso che sia perfettamente intuitivo :)
Lightness Races con Monica il

@LightnessRacesinOrbit Senza la comprensione che NULLnon è un valore, direi che è intuitivo provare a utilizzare =o !=poiché è così che si valuta qualsiasi altro valore. Non è fino a quando non sai che NULLnon è un valore che è davvero intuitivo da usare IS NOTpiuttosto che !=. Molti non sono consapevoli di ciò che NULLè veramente.
Midavalo

Inoltre, nella GUI NULLè presente nell'elenco dei valori (cp. Sopra), e quindi trattato come un valore "normale". E non c'è nessun pulsante IS NULLo mi è mancato tale ?! Quindi, quando si digita tale query e con la conoscenza, questo NULLdeve essere trattato in un modo speciale che potremmo discutere sull'intuizione, ma per sicurezza non nel contesto di QUESTA GUI.
Jochen Schwarze,

@Midavalo: Anche se è vero, suggerirei umilmente di non usare una funzione di linguaggio senza cercare di cosa si tratta :) Programmare indovinando non funziona.
Lightness Races con Monica il

Risposte:


33

Dichiarazione di non responsabilità: poiché la sintassi per il filtro in QGIS funziona con SQL, presumo qui che si applichino le regole SQL. Non sono completamente sicuro che sia del tutto corretto, ma sembra logico e spiega il comportamento.


Il filtro funziona con SQL, ecco perché devi cercare una risposta.

In breve, quando si utilizza un operatore logico in combinazione con null, il risultato è sempre null. Ma per testare null, SQL viene fornito con la IS (NOT)funzionalità di confronto, che consente di utilizzarlo per il filtro previsto.

Controlla la risposta di Bohemian su StackOverflow per una discussione più approfondita.


19

NULLnon è un valore, quindi non può eguagliare =o non eguagliare !=nulla. Non è lo stesso di zero 0che è un valore.

A NULLindica che non è stato registrato alcun valore nella cella che stai guardando. Per verificare se esiste un valore, chiedi se la cella IS NULLo seIS NOT NULL

  • IS NULL controlla se la cella è vuota
  • IS NOT NULL controlla se la cella non è vuota

Se si dispone di alcuni record dove un valori sono One, Two, Threee il resto NULLe si desidera trovare tutto ciò che non è Twosi avrebbe bisogno di usare qualcosa di simile

value != 'Two' OR value IS NULL

poiché i valori NULL non vengono restituiti in una query uguale / non uguale. Se si utilizza solo value != 'Three'il risultato, si escluderebbero tutti i NULLrecord poiché NULLnon è un valore che può essere uguale o non uguale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.