2012-09-29 13 views
8

मैं तो एक मेजgroup_concat शून्य के साथ काम नहीं कर रहा महत्व देता

CREATE TABLE IF NOT EXISTS `dept` (
    `did` int(11) NOT NULL, 
    `dname` varchar(50) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `dept` (`did`, `dname`) VALUES 
(1, 'Hi'), 
(2, NULL), 
(3, 'Hello'); 

है मैं एक प्रश्न है

select group_concat(concat(did,"','",dname) separator '),(') as Result from dept 

यह परिणाम उत्पादन के रूप में 1','Hi'),('3','Hello

प्रश्न: कैसे कर सकते हैं मुझे उपरोक्त क्वेरी से परिणाम 1','Hi'),('2','NULL'),('3','Hello

यह पंक्तियाँ जो शून्य मान हैं याद आ रही है, लेकिन मैं लाने के लिए सभी

Link for SQL Fiddle Demo of question

अद्यतन की जरूरत है: अगर मैं शून्य की इजाजत दी एक से अधिक या सभी स्तंभ है, वहाँ किसी तरह एक बार COALESCE लागू करने के लिए है सभी के लिए या प्रत्येक कॉलम में व्यक्तिगत रूप से आवेदन करना है?

+0

मैं एक concat http://stackoverflow.com/questions/13451605/how-to-use-group-concat- में groupconcat का एक और उदाहरण है इन-ए-कॉन्सैट-इन-माइस्क्ल/13451984 # 13451984 – Sami

उत्तर

9

इस कोशिश, COALESCE

.., COALESCE(dname, 'NULL'),.. 

का उपयोग यह NULL स्ट्रिंग दिखाई बना रही है। SQLFIDDLE DEMO

+1

धन्यवाद। मैं इसे – Sami

+0

@ सैमी [डेमो देखने के लिए यहां क्लिक करें] (http://sqlfiddle.com/#!2/0d82b/4) –

+0

कृपया दो या सभी कॉलम के पास मार्गदर्शन कर सकते हैं नल मूल्यों के बाद मुझे प्रत्येक कॉलम के साथ 'COALESCE' का उपयोग करना होगा या किसी एक बार ऐसा करने के लिए कुछ तरीका है? – Sami

2

MySQL aggregate function documentation से:

जब तक अन्यथा कहा गया है, समूह के कार्यों शून्य मान ध्यान न दें।

उपयोग COALESCE(), एक तार के साथ nulls को बदलने के लिए, क्योंकि वे एकीकृत फ़ंक्शन द्वारा समाप्त कर दिया जाएगा। उदाहरण के लिए COALESCE(dbname, 'NULL')स्ट्रिंगNULL वापस dbname IS NULL वापस कर देगा। इसका उद्देश्य आपके द्वारा दिए गए तर्कों के पहले गैर-शून्य को वापस करना है, और इसलिए डिफ़ॉल्ट मान वापस कर सकते हैं।

SELECT 
    GROUP_CONCAT(CONCAT(did,"','", COALESCE(dname, 'NULL')) SEPARATOR "'),('") AS Result 
FROM dept 
+0

धन्यवाद। मैं इसे कोशिश करूंगा – Sami

+0

आपका समाधान काफी अच्छी तरह से समझाया गया है और स्वीकार्य है। कृपया बस विभाजक '' को प्रतिस्थापित करें), (''' '' ''), ('' 'जैसा कि मैंने इसे प्रश्न में किया है और sqlfiddle डेमो – Sami

+0

@ सैमी ऊपर संपादित किया गया है। आप सिंगल कोट्स से भी बच सकते हैं जैसे कि' '' ' , (\ '' ' –

0

आशा निम्न क्वेरी अपने उद्देश्य को पूरा करेगा

SELECT GROUP_CONCAT(
IF(dname IS NOT NULL, CONCAT(did,"','",dname), CONCAT(did,"','NULL")) 
SEPARATOR '),(') AS Result FROM dept 
संबंधित मुद्दे