QGIS filtre ifadelerinde! = NULL ile IS NOT NULL arasındaki fark nedir?


26

NULLFarklı olan değerler için filtre uygulamak istediğim değerleri içeren bir niteliğe sahip bir şekil katmanım var NULL.

görüntü tanımını buraya girin

Böyle bir sorgu yapımı için mevcut GUI kullanarak, sezgisel olarak denemek

"obj_art" != NULL

görüntü tanımını buraya girin

Bu, 'bana' obj_art NULL' özniteliği olan tüm özellikleri farklı ' (yani kesinlikle 0'dan fazla sayılır) anlamına gelir. Bu sorguyu test etmek, benim açımdan garip bir sonuç veriyor:

görüntü tanımını buraya girin

Şimdiye kadar öğrendiğim şey bunu kullanarak başarabileceğim.

"obj_art" IS NOT NULL

Asıl soru, != NULLve arasındaki fark IS NOT NULLnedir?


Bildiğim kadarıyla sadece sözdizimi. Boş kullanıldığında ya da olmadığında. Başka bir kullanım = veya! =
nielsgerrits

"bir sezgisel denemek" Gerçekten mi? Niye ya? NULL bir değer değil. Kelimenin tam anlamıyla bir değerin olmaması. NULL "eşit" olamaz! Operatör !="değil" anlamına gelmez; "Eşit değil" anlamına gelir. IS NOT"değil" anlamına geliyor, bu yüzden bu kesinlikle sezgisel olduğunu düşünüyorum :)
Monica ile Lightness Races

Anlamadan @LightnessRacesinOrbit NULLbir değeri değil bunu söyleyebilirim olduğunu kullanmayı denemek için sezgisel =veya !=başka herhangi bir değer değerlendirmek yani olarak nasıl. Bunun NULL, kullanımdan IS NOTziyade sezgisel olduğu bir değer olmadığını bilmeden olmaz !=. Pek çoğu NULLgerçekte ne olduğunun farkında değil .
Midavalo

Ve ayrıca, GUI'de NULLdeğerler listesinde (yukarıdaki cp.) Ve bu nedenle 'normal' bir değer olarak kabul edilir. Ve düğme yok IS NULL, yoksa ben mi özledim ?! Dolayısıyla, sadece böyle bir sorguyu yazarken ve bilgiyle, bu NULLözel bir şekilde ele alınmalı, sezgi hakkında tartışabiliriz, ama bu GUI bağlamında değil.
Jochen Schwarze

@Midavalo: Bu doğru olsa da, ne olduğuna bakmadan bir dil özelliği kullanmamaya alçakgönüllülükle öneririm :) Tahmin ederek programlama işe yaramadı.
Monica ile Hafiflik Yarışları

Yanıtlar:


33

Feragatname: QGIS'deki filtreleme sözdizimi SQL ile çalıştığından, burada SQL kurallarının geçerli olduğunu varsayıyorum. Tamamen doğru olup olmadığından tam olarak emin değilim, ama mantıklı görünüyor ve davranışını açıklıyor.


Filtre SQL ile çalışır, bu yüzden bir cevap için oraya bakmak zorundasınız.

Kısacası, mantıksal bir operatör ile birlikte kullanıldığında null, sonuç her zaman olur null. Ancak, sınamak için nullSQL IS (NOT), amaçlanan filtrelemeniz için kullanmanıza izin veren karşılaştırma işleviyle birlikte gelir .

Daha ayrıntılı bir tartışma için Bohemian'ın stackoverflow hakkındaki cevabını kontrol edin .


19

NULLolduğu değil bir değer bu nedenle eşit olamaz, =eşit ya da değil !=bir şey. Bu sıfır aynı değildir 0olan olan bir değer.

A NULL, bakmakta olduğunuz hücreye hiçbir değer kaydedilmediğini gösterir. Bir değer olup olmadığını kontrol etmek için, hücreye IS NULLmi, yoksa hücreye miIS NOT NULL

  • IS NULL hücrenin boş olup olmadığını kontrol eder
  • IS NOT NULL hücrenin boş olup olmadığını kontrol eder

Eğer bir değerler bazı kayıtları varsa One, Two, Threeve geri kalanı NULLve olmayan her şeyi bulmak istiyorum Twogibi bir şey kullanmak gerekir

value != 'Two' OR value IS NULL

NULL değerler eşittir / eşittir sorgusu içinde döndürülmez. Sadece value != 'Three'sonuç kullandıysanız , eşit veya eşit olmayan bir değer olmadığı için tüm NULLkayıtları hariç tutabilirsiniz NULL.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.