Saya memiliki lapisan bentuk dengan atribut yang berisi NULL
nilai yang ingin saya terapkan filter untuk nilai yang berbeda NULL
.
Menggunakan gui yang tersedia untuk konstruksi permintaan seperti itu, orang akan mencoba secara intuitif
"obj_art" != NULL
Yang berarti 'beri saya semua fitur dengan atribut "obj_art" berbeda dari NULL
' (jumlah ini pasti lebih dari 0). Menguji permintaan ini memberikan hasil yang aneh dari sudut pandang saya:
Jadi yang saya pelajari sejauh ini adalah saya bisa mencapainya dengan menggunakan
"obj_art" IS NOT NULL
Pertanyaannya adalah, apa perbedaan antara != NULL
dan IS NOT NULL
?
!=
tidak berarti "tidak"; itu berarti "tidak sama dengan".IS NOT
berarti "tidak" jadi saya pikir ini sangat intuitif :)NULL
tidak nilai saya akan mengatakan itu adalah intuitif untuk mencoba menggunakan=
atau!=
sebagai yang bagaimana Anda menilai nilai lain. Tidak sampai Anda tahu bahwaNULL
itu bukan nilai yang benar-benar intuitif untuk digunakanIS NOT
daripada!=
. Banyak yang tidak menyadari apa yangNULL
sesungguhnya.NULL
ada dalam daftar nilai (cp. Di atas), dan karenanya diperlakukan sebagai nilai 'normal'. Dan tidak ada tombolIS NULL
, atau aku melewatkannya ?! Jadi, ketika hanya mengetik permintaan seperti itu dan dengan pengetahuan, yangNULL
harus diperlakukan dengan cara khusus kita bisa membahas tentang intuisi, tetapi untuk shure tidak dalam konteks GUI INI.Jawaban:
Penafian: Karena sintaksis untuk memfilter dalam QGIS bekerja dengan SQL, saya mengasumsikan di sini bahwa aturan SQL berlaku. Saya tidak sepenuhnya yakin apakah itu sepenuhnya benar, tetapi tampaknya logis dan itu menjelaskan perilakunya.
Filter bekerja dengan SQL, itu sebabnya Anda harus mencari jawaban di sana.
Singkatnya, ketika menggunakan operator logis yang dikombinasikan dengan
null
, hasilnya selalunull
. Tetapi untuk mengujinull
, SQL dilengkapi denganIS (NOT)
fungsi perbandingan, yang memungkinkan untuk menggunakannya untuk pemfilteran yang Anda inginkan.Periksa jawaban Bohemian pada stackoverflow untuk diskusi yang lebih mendalam.
sumber
NULL
adalah tidak nilai, karena itu tidak bisa sama=
atau tidak sama!=
apa-apa. Ini tidak sama dengan nol0
yang merupakan nilai.A
NULL
menunjukkan bahwa tidak ada nilai yang telah direkam dalam sel yang Anda lihat. Untuk memeriksa apakah ada nilai, Anda bertanya apakah selIS NULL
atau jika ituIS NOT NULL
IS NULL
memeriksa untuk melihat apakah sel kosongIS NOT NULL
memeriksa untuk melihat apakah sel tidak kosongJika Anda memiliki beberapa catatan di mana nilai-nilai
One
,Two
,Three
dan sisanyaNULL
dan Anda ingin mencari segala sesuatu yang tidakTwo
Anda akan perlu menggunakan sesuatu sepertivalue != 'Two' OR value IS NULL
karena nilai NULL tidak dikembalikan dalam kueri sama dengan / tidak sama dengan. Jika Anda hanya
value != 'Three'
menggunakan hasilnya akan mengecualikan semuaNULL
catatan karenaNULL
bukan nilai yang bisa sama atau tidak sama.sumber