2012-07-16 13 views
32

यह MySQLMYSQL बाएं जुड़ें मैं नल मूल्यों का चयन कैसे करूं?

में तालिका में शामिल होने के बारे में मेरे अंतिम प्रश्न का एक अनुवर्ती प्रश्न है, मुझे बाएं शामिल तालिका से नल मानों का चयन करने में सक्षम होना चाहिए।

यहाँ मेरी शामिल हो:

table1.id | table1.name | table2.id | table2.surname 
     1 |  John |   1 |   Doe 
     2 |  Michael |   2 |  Anderson 
     3 |  Anna |  NULL |   NULL 
     4 |   Sue |  NULL |   NULL 

मैं चयन करने के लिए कहां table2.surname = शून्य, लेकिन यह काम नहीं करता है की तरह एक प्रश्न

SELECT table1.*,table2.* 
FROM table1 
LEFT JOIN table2 
    ON table1.id=table2.id 
WHERE table2.surname=NULL 

मैं कुछ हद तक इसके पीछे तर्क नहीं समझ सकते हैं चाहते हो जाएगा मुझे कोई परिणाम दे रहा है, लेकिन उन्हें परिणाम लेने के लिए एक तरीका होना चाहिए?

किसी भी मदद

उत्तर

39

सराहना NULL मूल्यों की तुलना करने के लिए आप इस तरह, IS NULL विधेय का उपयोग करना होगा:

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL 
+0

सीधे प्रश्न से संबंधित नहीं है, लेकिन आपको सार्थक मूल्यों को वापस पाने के लिए 'WHERE' खंड का उपयोग करना होगा, न कि' और 'खंड में शामिल होना चाहिए। वह मुझे ट्रिपिंग कर रहा था। – HartleySan

4

कोशिश के साथ:

SELECT table1.*,table2.* 
FROM table1 
    LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL 
12

आप के बजाय IS NULL उपयोग करने के लिए = NULL:

0 क्योंकि NULL अनिवार्य रूप से एक "अज्ञात" और नहीं बराबर या बराबर नहीं कुछ भी (भी नहीं खुद) के, तो करने की कोशिश कर सकते हैं

कारण है कि आप बस = NULL ऐसा नहीं कर सकते है इसकी तुलना किसी चीज से करें जैसे कि यह एक सटीक मैच होना चाहिए, अपेक्षित बूलियन 0 या 1 की बजाय NULL वापस कर देगा, और यही कारण है कि आपकी क्वेरी खाली परिणाम लौट रही थी।

वहाँ के बीच एक स्पष्ट अंतर "है अज्ञात" है और "अज्ञात के बराबर है"। अगर कुछ है अज्ञात या अज्ञात नहीं है आप निश्चित रूप से परीक्षण कर सकते हैं, लेकिन आप परीक्षण नहीं कर सकते अगर कुछ "बराबर है" अज्ञात क्योंकि अज्ञात अज्ञात है, और यह कोई मतलब नहीं होगा।

इसके अलावा

, जब से तुम MySQL का उपयोग कर रहे, एक और विकल्प table2.surname <=> NULL, जहां <=> एक MySQL विशेष शून्य-सुरक्षित तुलना ऑपरेटर है उपयोग करने के लिए है, लेकिन यह उपयोग करने के लिए और सिर्फ मानक SQL तरीके के साथ छड़ी नहीं की कोशिश होगी (IS NULL/IS NOT NULL)

1

MySQL specification के अनुसार आपको "= NULL" के बजाय "IS NULL" का उपयोग करना चाहिए। यह कहता है कि "(NULL = NULL) न्यूल के बराबर है"। लेकिन न्यूल बराबर बराबर होता है जबकि यह बूलियन के रूप में उपयोग किया जाता है।

संबंधित मुद्दे