2012-04-14 13 views
12

मैं CASE कथन के साथ कई मानों का चयन करने का प्रयास कर रहा हूं। मैंने देखा है हमMYSQL CASE कई मानों के साथ कथन

CASE 
    WHEN wall.type="bk" 
    THEN books.id1,books.id2, // and so on 
END as column_1, 

वहाँ एकाधिक स्तंभों के साथ THEN करते हैं या हम बस CASE THEN बयान के एक समूह के बारे में की जरूरत है ऐसा करने के लिए एक रास्ता है नहीं कर सकते? ऐसा लगता है कि

+0

आप कर सकते थे; लेकिन मैं इसकी सिफारिश नहीं करता; कई स्तंभों को एकसाथ संयोजित करें और उन्हें बाद में'THEN books.id1 | ',' books.id2 ... 'पर पार्स करें, जो आप करने की कोशिश कर रहे हैं, उस पर निर्भर करता है। यह कई मूल्यों की समस्याओं को खत्म कर देगा और एक के रूप में उपनाम किया जाएगा। क्योंकि यह 1 मान वापस आ जाएगा। – xQbert

+0

आपके समय के लिए धन्यवाद। क्या आप समझ सकते हैं कि यह कैसे करें? –

+0

CONCAT (books.ID1, ',', books.id2, ',' bookxId ...) 1, 2, 3 लौटाएंगे यदि booksid1 ... क्रमशः 1,2,3 है। – xQbert

उत्तर

11

नहीं, यह केवल एक ही मूल्य है। इसके अतिरिक्त, यह "एकाधिक कॉलम" का उपयोग करने के लिए विरोधाभासी है और उन एकाधिक कॉलम को column_1 के रूप में नामित करें, है ना? :)

आप अन्य आईडी को एक समान कॉलम (एक समान केस) के साथ स्टोर करने के लिए एक और कॉलम का उपयोग कर सकते हैं और else मानों का प्रतिनिधित्व करने के लिए नल का उपयोग कर सकते हैं, जैसा कि आप अभी कर रहे हैं।

उदाहरण:

CASE 
    WHEN wall.type="bk" 
    THEN books.id1 
END as column_1, 
CASE 
    WHEN wall.type="bk" 
    THEN books.id2 
END as column_2 

चेक अधिक जानकारी के लिए official documentation

+0

लेकिन यदि आप 'THEN' क्लॉज में उपयोगकर्ता द्वारा परिभाषित मान को अपडेट करना चाहते हैं तो क्या होगा? – modulitos

+0

@ लुकास हम्म, सुनिश्चित नहीं है कि आप किस बारे में बात कर रहे हैं। सबसे अधिक संभावना है कि एक अलग सवाल होना चाहिए –

+0

एक और उदाहरण है कि कैसे MySQL सप्ताह के हर दिन DRY सिद्धांत का उल्लंघन करता है। मुझे लगता है कि मैं अपने आप को दावा करने के करीब आ रहा हूं कि किसी भी अन्य भाषा सीखने से पहले MySQL सीखना आपको बुरी आदतों को विकसित करने में मदद कर सकता है। –

4

सं CASE बयान केवल एक ही मान सकते हैं, तो प्राप्त करने के लिए एक ही रास्ता है कि तुम क्या चाहते मामले नकल है ...

डेटाबेस सर्वर अनुकूलित किया जाना चाहिए और पर केवल एक बार की जांच करते हैं एक ही शर्त ...

0

और सब कुछ किया जा सकता है, लेकिन यह हमेशा निर्भर करता है कि आप क्या करना चाहते हैं। डेटा को सरणी के रूप में ले जाने के बाद और आप जो चाहते हैं उसके बाद मैं आपको एक कामकाजी उदाहरण दिखाऊंगा।

CREATE TABLE wall (`ident` int,`type` varchar(2), `order` int); 
INSERT INTO wall (`ident`, `type`, `order`) VALUES 
    (40,'bk', 1), 
    (41,'bk', 5), 
    (42,'rt', 2), 
    (43,'bk', 3), 
    (44,'rt', 1); 

CREATE TABLE books (`ident` int,`id1` int, `time` varchar(8), `id2` int); 
INSERT INTO books (`ident`, `id1`, `time`, `id2`) VALUES 
    (40, 10, '18:07:00', 20), 
    (43, 11, '05:00:00', 21), 
    (44, 12, '21:01:00', 22), 
    (41, 13, '10:00:00', 23), 
    (42, 14, '23:10:00', 24); 
#-------------------------- 
SELECT 
    CASE 
    WHEN wall.type='bk' 
    THEN CONCAT(books.id1,'-',books.id2) 
END AS column_1 

FROM wall JOIN books ON books.ident = wall.ident GROUP BY wall.ident ORDER BY wall.ident ASC; 

प्रिंट:

column_1 
1 10-20 
2 13-23 
3 NULL 
4 11-21 
5 NULL 

इस लिंक के माध्यम कार्रवाई में समाधान: http://rextester.com/LHPI38373

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