2009-03-19 13 views
103

अलग मैं की तरह एक क्वेरी चलाने के लिए की जरूरत है:अल्पविराम के रूप में MySQL परिणाम सूची

SELECT p.id, p.name, 
     (SELECT name 
      FROM sites s 
     WHERE s.id = p.site_id) AS site_list 
    FROM publications p 

लेकिन मैं उप चयन एक अल्पविराम अलग की गई सूची वापस जाने के लिए, के बजाय डेटा के एक स्तंभ चाहते हैं। क्या यह भी संभव है, और यदि हां, तो कैसे?

उत्तर

206

आप इसे करने के लिए GROUP_CONCAT का उपयोग कर सकते हैं, उदा। जैसे

SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list 
FROM sites s 
INNER JOIN publications p ON(s.id = p.site_id) 
GROUP BY p.id, p.name; 
+1

ग्रेट यह मेरे लिए धन्यवाद काम किया !!!!! – Devjosh

+9

इसके अलावा, त्वरित नोट करें कि यदि आप PHPMyAdmin का उपयोग कर रहे हैं और पृष्ठ पर अल्पविराम-सीमित सूची आउटपुट करना चाहते हैं, तो 'GROUP_CONCAT (CAST (s.name AS CHAR)) का उपयोग करें या अन्यथा यह पूरी तरह से कुछ अनावश्यक' [बीएलओबी - 20 बाइट्स] '। – devios1

+2

इरादा ठीक है और MySQL इसे अनुमति देगा, लेकिन ग्रुप BY के उपयोग के साथ सावधान रहें (आमतौर पर)। ग्रुप बाय क्लॉज के संदर्भ में चुनिंदा सूची में आइटम वैध योग होने की आवश्यकता है। इस मामले में, p.name कड़ाई से मान्य नहीं है। एसक्यूएल मानक के अनुरूप कोई भी डेटाबेस इसे एक त्रुटि के रूप में पेश करेगा। इस मामले के लिए, या तो चयन सूची में MAX (p.name) का उपयोग करें या GROUP BY खंड में p.name जोड़ें। चूंकि पौलुस का अर्थ प्राथमिक या अद्वितीय कुंजी का प्रतिनिधित्व करने के लिए पी.आईडी का अर्थ है, ग्रुप बाय क्लॉज में पी। नाम जोड़ने से अंतिम परिणाम पर कोई असर नहीं पड़ेगा। –

7
इसके बजाय group concat() का उपयोग करने का

कुछ तुम सिर्फ concat()

Select concat(Col1, ',', Col2) as Foo_Bar from Table1; 

संपादित MySQL में यह केवल काम करता है का उपयोग कर सकते हैं; ओरेकल कॉन्सैट केवल दो तर्क स्वीकार करता है। ऑरैकल में आप चुनिंदा कॉल 1 जैसे कुछ का उपयोग कर सकते हैं || ',' || col2 || ',' || col3 table1 से foobar के रूप में; एसक्यूएल सर्वर में आप पाइप के बजाय + का उपयोग करेंगे।

+1

बिल्कुल मुझे क्या चाहिए, धन्यवाद! –

+0

यह ग्रुप बाय केस में काम नहीं करना चाहिए, जबकि GROUP_CONCAT() एक कॉलम की सामग्री को जोड़ देगा –

0

मेरे मामले में मुझे किसी ऐसे व्यक्ति के सभी खाता संख्या को जोड़ना है जो मोबाइल नंबर अद्वितीय है। इसलिए मैंने इसे प्राप्त करने के लिए निम्न क्वेरी का उपयोग किया है।

SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber 

क्वेरी परिणाम नीचे है:

Accounts 
93348001,97530801,93348001,97530801 
89663501 
62630701 
6227895144840002 
60070021 
60070020 
60070019 
60070018 
60070017 
60070016 
60070015 
संबंधित मुद्दे