मूल प्रश्न डेटाबेस विशिष्ट था, लेकिन शायद अधिक सामान्य उत्तर शामिल करने के लिए यह एक अच्छी जगह है। यह एक सामान्य प्रश्न है। आप जिस अवधारणा का वर्णन कर रहे हैं उसे अक्सर 'समूह संयोजन' के रूप में जाना जाता है। SQL-92 या SQL-99 में कोई मानक समाधान नहीं है। तो आपको एक विक्रेता-विशिष्ट समाधान की आवश्यकता होगी।
- MySQL - अंतर्निहित GROUP_CONCAT फ़ंक्शन का उपयोग करें। आपके उदाहरण में आप कुछ इस तरह चाहेंगे:
select o.ID, o.Address, o.OtherDetails, GROUP_CONCAT( concat(e.firstname, ' ', e.lastname) ) as Employees from employees e inner join organization o on o.org_id=e.org_id group by o.org_id
- PostgreSQL - PostgreSQL 9.0 अब उतना ही सरल है जितना कि string_agg(expression, delimiter) बिल्ट-इन है। यहाँ यह तत्वों के बीच 'अल्पविराम-स्थान' के साथ है:
select o.ID, o.Address, o.OtherDetails, STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) as Employees from employees e inner join organization o on o.org_id=e.org_id group by o.org_id
9.0 से पहले PostgreSQL आपको CREATE AGGREGATE के साथ अपने स्वयं के समग्र कार्यों को परिभाषित करने की अनुमति देता है। MySQL की तुलना में थोड़ा अधिक काम, लेकिन बहुत अधिक लचीला। इसे देखें अन्य पोस्ट अधिक जानकारी के लिए। (बेशक PostgreSQL 9.0 और बाद में यह विकल्प भी है।)
-
ओरेकल - LISTAGG . का उपयोग करके एक ही विचार ।
-
एमएस एसक्यूएल सर्वर - STRING_AGG . का उपयोग करके एक ही विचार
-
फ़ॉलबैक समाधान - अन्य डेटाबेस तकनीकों में या ऊपर सूचीबद्ध तकनीकों के बहुत पुराने संस्करणों में आपके पास ये समूह संयोजन कार्य नहीं हैं। उस स्थिति में एक संग्रहित प्रक्रिया बनाएं जो org_id को अपने इनपुट के रूप में लेती है और समेकित कर्मचारी नामों को आउटपुट करती है। फिर अपनी क्वेरी में इस संग्रहीत कार्यविधि का उपयोग करें। यहां कुछ अन्य प्रतिक्रियाओं में इस तरह की संग्रहीत प्रक्रियाओं को लिखने के तरीके के बारे में कुछ विवरण शामिल हैं।
select o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees from organization o