QGIS फिल्टर एक्सप्रेशंस में क्या अंतर है! = NULL और IS NOT NULL?


26

मेरे पास एक आकार की परत है जिसमें एक विशेषता NULLहै, जिसमें मैं उन मानों के लिए एक फ़िल्टर लागू करना चाहूंगा जिनसे अलग हूं NULL

यहाँ छवि विवरण दर्ज करें

इस तरह के क्वेरी निर्माण के लिए उपलब्ध गुई का उपयोग करते हुए, कोई सहज रूप से प्रयास कर सकता है

"obj_art" != NULL

यहाँ छवि विवरण दर्ज करें

जिसका अर्थ है 'मुझे विशेषता के साथ सभी सुविधाओं "obj_art" से अलग दे NULL' (ये गिनती निश्चित रूप से 0 से अधिक)। इस प्रश्न का परीक्षण मेरे दृष्टिकोण से एक अजीब परिणाम देता है:

यहाँ छवि विवरण दर्ज करें

इसलिए मैंने अब तक जो भी सीखा है, वह यह है कि मैं इसे हासिल कर सकता हूं

"obj_art" IS NOT NULL

सवाल के बीच अंतर क्या है, है != NULLऔर IS NOT NULL?


जहां तक ​​मुझे पता है कि यह सिर्फ वाक्यविन्यास है। जब अशक्त उपयोग है या नहीं है। Else उपयोग = या =!
nielsgerrits

"एक सहज ज्ञान युक्त कोशिश करेंगे" वास्तव में? क्यूं कर? NULL एक मान नहीं है। यह वस्तुतः मूल्य का अभाव है। आप "बराबर" नहीं कर सकते हैं! ऑपरेटर का !=मतलब "नहीं है" है; इसका अर्थ है "बराबर नहीं है"। IS NOTइसका मतलब "नहीं है" इसलिए मुझे लगता है कि यह पूरी तरह से सहज है :)
मोनिका

समझ है कि बिना @LightnessRacesinOrbit NULLएक मूल्य नहीं है मैं कहूंगा कि यह है उपयोग करने के लिए प्रयास करने के लिए सहज ज्ञान युक्त =या !=आप कैसे किसी अन्य मूल्य का आकलन है कि है। यह तब तक नहीं है जब तक आप जानते हैं कि NULLऐसा मूल्य नहीं है जो इसके IS NOTबजाय उपयोग करने के लिए वास्तव में सहज है !=। बहुतों को इस बात की जानकारी नहीं है कि NULLवास्तव में क्या है।
Midavalo

और इसके अलावा, GUI NULLमान सूची (cp। ऊपर) में है, और इसलिए इसे 'सामान्य' मान के रूप में माना जाता है। और कोई बटन नहीं है IS NULL, या क्या मैंने ऐसा याद किया ?! इसलिए, जब केवल इस तरह की क्वेरी और ज्ञान के साथ टाइप NULLकिया जाता है , तो उस विशेष तरीके से व्यवहार किया जाना चाहिए जिसे हम अंतर्ज्ञान के बारे में चर्चा कर सकते हैं, लेकिन इस जीयूआई के संदर्भ में नहीं।
जोहान श्वार्ज़े

@ मिदावेलो: जबकि यह सच है, मैं विनम्रतापूर्वक किसी भाषा सुविधा का उपयोग किए बिना यह सुझाव देने की सलाह देता हूं कि यह क्या है :) यह अनुमान लगाकर काम नहीं करता है।
मोनिका

जवाबों:


33

अस्वीकरण: क्यूजीआईएस में फ़िल्टरिंग के लिए सिंटैक्स एसक्यूएल के साथ काम करता है, इसलिए मैं यहां मान रहा हूं कि एसक्यूएल नियम लागू होते हैं। मुझे पूरी तरह यकीन नहीं है कि यह पूरी तरह से सही है, लेकिन यह तर्कसंगत लगता है और यह व्यवहार की व्याख्या करता है।


फ़िल्टर SQL के साथ काम करता है, यही कारण है कि आपको एक जवाब के लिए वहां देखना होगा।

संक्षेप में, जब एक तार्किक ऑपरेटर के साथ संयोजन में उपयोग किया जाता है null, तो परिणाम हमेशा होता है null। लेकिन परीक्षण के लिए null, SQL IS (NOT)तुलनात्मक कार्यक्षमता के साथ आता है , जो इसे आपके इच्छित फ़िल्टरिंग के लिए उपयोग करने की अनुमति देता है।

अधिक गहन चर्चा के लिए स्टैकओवरफ्लो पर बोहेमियन के उत्तर की जाँच करें ।


19

NULLहै एक मूल्य है, इसलिए यह बराबर नहीं कर सकते हैं =या नहीं के बराबर !=कुछ भी। यह शून्य के समान नहीं है 0जो है एक मूल्य।

एक NULLसंकेत करता है कि जिस सेल को आप देख रहे हैं उसमें कोई मूल्य दर्ज नहीं किया गया है। यह जाँचने के लिए कि क्या कोई मान मौजूद है, यदि आप पूछें कि क्या सेल IS NULLया यदि यहIS NOT NULL

  • IS NULL यह देखने के लिए जाँच करता है कि सेल खाली है या नहीं
  • IS NOT NULL यह देखने के लिए जांचें कि क्या सेल खाली नहीं है

यदि आपके पास कुछ रिकॉर्ड हैं जहां एक मान है , और बाकी और आप सब कुछ ढूंढना चाहते हैं One, तो आपको कुछ ऐसा उपयोग करने की आवश्यकता नहीं होगीTwoThreeNULLTwo

value != 'Two' OR value IS NULL

जैसा कि NULL मान एक बराबर / लौटे नहीं क्वेरी में नहीं मिलता है। यदि आप सिर्फ value != 'Three'परिणाम का उपयोग करते हैं तो सभी NULLरिकॉर्डों को बाहर कर देंगे क्योंकि NULLऐसा मूल्य नहीं है जो बराबर या बराबर नहीं हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.