2013-04-24 4 views
24

की उपस्थिति के बराबर नहीं मूल्यांकन का मूल्यांकन नहीं कर रहा है मुझे एक mysql क्वेरी में समस्या हो रही है। मैं 2. के मूल्यों को बाहर निकालना चाहते तो मैंने सोचा कि मैं निम्नलिखित करना होगा:MYSQL वाक्यविन्यास शून्य

table products 

id | name  | backorder 
------------------- 
1 | product1 | NULL 
2 | product2 | NULL 
3 | product3 | 2 

SELECT name from `products` p 
WHERE backorder <> '2' 

हालांकि, इस उत्पाद 1 के वांछित परिणाम न जताए उत्पाद 2 यह एक खाली परिणाम तालिका दे रहा है।

दूसरी ओर अगर मैं

SELECT name from `products` p 
WHERE backorder = '2' 

का उपयोग तो यह पैदा करता है: product3। लेकिन मैं उन रिकॉर्ड्स को प्राप्त करना चाहता हूं जहां यह 2 के बराबर नहीं है।

कुछ <> '2' के साथ काम नहीं कर रहा है। क्या यह हो सकता है कि नल मूल्य इसे फेंक रहे हैं? क्या कोई फिक्स सुझा सकता है। अग्रिम में धन्यवाद!

+8

आप 'NULL'-सुरक्षित समानता ऑपरेटर का उपयोग कर सकते हैं: '<=> 2' – eggyal

उत्तर

36

IS NULL या IS NOT NULL का उपयोग NULL मानों की तुलना करने के लिए करें क्योंकि वे केवल अज्ञात हैं।

SELECT name 
from products p 
WHERE backorder IS NULL OR backorder <> 2 
+0

बैकॉर्डर नहीं है। एसओ मुझे अनुमति देता है जब सही निशान होगा। एक सवाल ... कुछ रिकॉर्डों में मूल्य 1 है। उस मामले की अनुमति देने के लिए जहां मूल्य शून्य है या 1 मुझे कुछ ऐसा करने में सक्षम होना चाहिए (बैकऑर्डर IS NULL या backorder = '1')। यह इस समय मेरे लिए काम नहीं कर रहा है। – user1904273

+0

इस डेमो के बारे में कैसे? http://www.sqlfiddle.com/#!2/e0e57/2 –

+0

सिर्फ स्पष्टीकरण के लिए, क्या आप 'न्यूल' और '1' के मूल्य के साथ प्राप्त करना चाहते हैं? –

-4

इस प्रयास करें और देखें।

SELECT name from `products` p 
WHERE backorder != '2' 
+0

क्या आपने यह जांच लिया है? – user3115056

+0

नहीं। यह काम नहीं करता है। ऑपरेटर '<>' और '! =' बराबर हैं। Http://stackoverflow.com/questions/2066987/using-the-correct-or-preferable-not-equal-operator-in-mysql –

6

खोलने के लिए इस

हम इस का उपयोग कर सकते क्षमा भी

SELECT name 
from products p 
WHERE COALESCE(backorder,1) <> 2 
+0

यह इंडेक्स जोड़ने की क्षमता को तोड़ता है –

2

आप उपयोग कर सकते हैं:

SELECT `name` FROM `products` `p` 
WHERE NOT `backorder` <=> '2' 

या

SELECT `name` FROM `products` `p` 
WHERE !(`backorder` <=> '2') 
संबंधित मुद्दे