Eu tenho uma camada de forma com um atributo que contém NULL
valores aos quais gostaria de aplicar um filtro para valores diferentes NULL
.
Usando a GUI disponível para essa construção de consulta, tentaria-se intuitivamente
"obj_art" != NULL
O que significa 'dê-me todos os recursos com o atributo "obj_art" diferente de NULL
' (estes contam definitivamente mais que 0). Testar esta consulta fornece um resultado estranho do meu ponto de vista:
Então, o que eu aprendi até agora é que posso conseguir isso usando
"obj_art" IS NOT NULL
A questão é: qual é a diferença entre != NULL
e IS NOT NULL
?
!=
não significa "não é"; significa "não é igual a".IS NOT
significa "não é", então eu acho que isso é perfeitamente intuitiva :)NULL
não é um valor, eu diria que é intuitivo tentar usar=
ou!=
como é assim que você avalia qualquer outro valor. Não é até que você sabe queNULL
não é um valor que é muito intuitivo de usarIS NOT
, em vez de!=
. Muitos não têm consciência do queNULL
realmente é.NULL
está na lista de valores (cp. Acima) e, portanto, é tratada como um valor 'normal'. E não há botãoIS NULL
, ou eu senti falta disso ?! Portanto, ao digitar essa consulta e com o conhecimento, issoNULL
deve ser tratado de uma maneira especial, poderíamos discutir sobre a intuição, mas, sem dúvida, não no contexto desta ESTA GUI.Respostas:
Isenção de responsabilidade: como a sintaxe para filtragem no QGIS funciona com SQL, estou assumindo aqui que as regras SQL se aplicam. Não tenho muita certeza se isso está totalmente correto, mas parece lógico e explica o comportamento.
O filtro funciona com SQL, é por isso que você precisa procurar uma resposta lá.
Em resumo, ao usar um operador lógico em combinação com
null
, o resultado é semprenull
. Mas, para testarnull
, o SQL vem com aIS (NOT)
funcionalidade de comparação, que permite usá-lo para a filtragem pretendida.Verifique a resposta da Bohemian no stackoverflow para uma discussão mais aprofundada.
fonte
NULL
não é um valor, portanto, não pode ser igual=
ou não é!=
nada. Não é o mesmo que zero,0
que é um valor.A
NULL
indica que nenhum valor foi registrado na célula que você está visualizando. Para verificar se existe um valor, você pergunta se a célulaIS NULL
ou seIS NOT NULL
IS NULL
verifica se a célula está vaziaIS NOT NULL
verifica se a célula não está vaziaSe você tem alguns registros onde um valores são
One
,Two
,Three
e o restoNULL
e você quer encontrar tudo o que não éTwo
você precisaria usar algo comovalue != 'Two' OR value IS NULL
como valores NULL não são retornados em uma consulta igual / não igual. Se você usasse apenas
value != 'Three'
o resultado excluiria todos osNULL
registros, poisNULL
não é um valor que possa ser igual ou não.fonte