2009-08-20 12 views
5

MySQL सर्वर संस्करण 5.0.45 में खाली सेट को संभालना। निम्नलिखित पर विचार करें:MySQL CASE कथन

(SELECT CASE 
    WHEN t.group_id = 12 THEN 'yes' 
    ELSE 'no' 
    END 
    FROM sample_table t 
    WHERE t.user_id = 2 
    AND t.group_id = 12) as foo 

एक बड़ा बयान की यह सबक्वेरी काम करता है के रूप में मैं उम्मीद थी, एक 'हां' या 'नहीं' स्ट्रिंग मान समय के सबसे अधिक उपज। यह आदर्श नहीं है, लेकिन यह किसी और के कोड पर काम करने के लिए मिलता है!

हालांकि, कभी-कभी चयन वैध रूप से एक खाली सेट वापस कर सकता है, जिस स्थिति में foo को पूर्ण पर सेट किया जाता है। यह वास्तव में एप्लिकेशन को तोड़ नहीं देता है, लेकिन यह परेशान है। क्या कोई तरीका है कि मैं गारंटी दे सकता हूं कि foo हमेशा 'हां' या 'नहीं' होगा, भले ही तालिका में कोई मिलान पंक्ति न हो?

उत्तर

5

यदि यह एक अदिश सबक्वेरी है (यानी आप एक SELECT या WHERE खंड में उपयोग करते हैं, नहीं में FROM खंड), तो इसका उपयोग करें:

IF(
EXISTS 
(
SELECT NULL 
FROM sample_table t 
WHERE t.user_id = 2 
     AND t.group_id = 12 
), 'yes', 'no' 
) 

या यहाँ तक कि इस:

COALESCE(
(
SELECT 'yes' 
FROM sample_table t 
WHERE t.user_id = 2 
     AND t.group_id = 12 
), 'no') 
+0

धन्यवाद बहुत बहुत! –

0

आप एक "नहीं" मामले का प्रतिनिधित्व करने के खाली सेट चाहते हैं, तो आप शायद यह बजाय कर सकता है:

select ... where ... (foo = 'no' or foo is null) 

यह काफी अपने सबक्वेरी बदलने के लिए बिना दोनों casees संभाल होगा।

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