MySQL यदि NULL नहीं है, तो 1 प्रदर्शित करें, अन्यथा 0 प्रदर्शित करें


104

मैं यहाँ थोड़ी डिस्प्ले कॉम्प्लेक्शन के साथ काम कर रहा हूँ। मुझे यकीन है कि एक आईएफ / ईएलएसई क्षमता है जो मैं अभी देख रहा हूं।

मेरे पास 2 टेबल हैं जो मैं क्वेरी कर रहा हूं (ग्राहक, पते)। पहले का मुख्य रिकॉर्ड है, लेकिन दूसरे में LEFT JOIN करने का रिकॉर्ड हो भी सकता है और नहीं भी।

मुझे पता तालिका में कोई रिकॉर्ड नहीं है, तो मैं एक शून्य प्रदर्शित करना चाहता हूं। और मैं केवल 1 प्रदर्शित करना चाहता हूं, अगर कोई रिकॉर्ड मौजूद है।

मैंने अब तक क्या प्रयास किया है:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

यह पहला उदाहरण ऐसा नहीं करता है। लेकिन मैं गलत का उपयोग कर सकता हूँ।

यदि कुछ मौजूद है, तो मैं 0, यदि शून्य और 1 को कैसे प्रदर्शित कर सकता हूं?


संभावित डुप्लिकेट संभव नहीं पूर्ण मामला एसक्यूएल
nawfal

जवाबों:


211

इसके बजाय COALESCE(a.addressid,0) AS addressexists, उपयोग करें CASE:

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

या सरल:

(a.addressid IS NOT NULL) AS addressexists

यह काम करता है क्योंकि MySQL और के रूप में TRUEप्रदर्शित किया जाता है ।1FALSE0



17

अगर आप C / C ++ से आ रहे हैं और काम करने की उम्मीद कर रहे हैं तो सावधान:

select if(name, 1, 0) ..

भले ही 'नाम' C के विपरीत NULL नहीं है, फिर भी एक गलत स्थिति चालू हो जाती है और उपरोक्त कथन 0. वापस आ जाता है। इस प्रकार, आपको NULL या खाली स्ट्रिंग के लिए स्पष्ट रूप से जांच करना याद रखना होगा:

 select if(name is null or name = '', 0, 1)

पीएस यूजेन का ऊपर का उदाहरण सही है , लेकिन मैं इस बारीकियों को स्पष्ट करना चाहता था क्योंकि इसने मुझे आश्चर्यचकित कर दिया।


16
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

2

WHERE के बिना एक और तरीका, यह कोशिश करो ..

रिक्त और पूर्ण मान दोनों का चयन करेगा

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

यह अशक्त होगा अगर यह एक खाली स्ट्रिंग है, तो उस पर भी सच हो।


उपयोगी भी: टैबलेन से IFNULL (फ़ील्डनाम, "1") चुनें;
PodTech.io

1

आप वास्तव में MySQL के नवीनतम संस्करणों में एक IF स्टेटमेंट का उपयोग कर सकते हैं।

IF(expr,if_true_expr,if_false_expr)

अर्थात:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors

0

TSQL के भीतर, आप कोशिश कर सकते हैं:

SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists

SQL सर्वर काम करना चाहिए

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