2015-06-13 11 views
7

मैं पूर्णांक सरणियों और {1000,4000,6000} या {1000} या {1000,4000} की तरह मान ekw कहा जाता है के साथ एक मेज test स्तंभ है के साथ अन्य तालिका में पूर्णांक के लिए शामिल हो। ये मान एक और तालिकाPostgreSQL पूर्णांक सरणी मान desc स्ट्रिंग

tab: test 
id | name | ekw 
----------------- 
1 | One | {1000} 
2 | Two | {1000,4000} 
3 | Three | {1000,4000,6000} 

tab: ekwdesc 
id | value | desc 
----------------- 
1 | 1000 | Max 
2 | 2000 | Tim 
3 | 3000 | Rita 
5 | 4000 | Sven 
6 | 5000 | Tom 
7 | 6000 | Bob 

में एक वर्णन स्ट्रिंग के लिए मेल खाते हैं यह इन स्तंभों का चयन करें और तार मुद्रित करने के लिए संभव है?

कुछ की तरह:

select name, ekw from test, ekwdesc 

मैं इस परिणाम को देखने के लिए करना चाहते हैं:

id | name | ekwdesc 
----------------- 
1 | One | Max 
2 | Two | Max, Sven 
3 | Three | Max, Sven, Bob 

मैं के साथ की कोशिश की और किसी भी है, लेकिन यह काम करने के लिए नहीं मिल सका।

उत्तर

11

आपके पास शामिल होने के लिए any ऑपरेटर का उपयोग करने का सही विचार था।

SELECT name, STRING_AGG(description, ', ') 
FROM  test 
JOIN  ekwdesc ON ekwdesc.value = ANY(test.ekw) 
GROUP BY name 

एक निष्पादन उदाहरण के लिए संलग्न SQLFiddle देखें: एक बार में शामिल होने के पूरा हो गया है, वह सब बचा है प्रारूप आप चाहते हैं परिणाम को बदलने के लिए string_agg उपयोग करने के लिए है।

+0

क्या यह आश्वासन देता है कि वर्णन टैग सही क्रम में वापस आ जाएंगे - ekw सरणी में मानों का क्रम? – Sigfried

+0

@ सिग्फ्रीड नोप। –

+0

क्या इस समाधान को मामले में बदल दिया जा सकता है, जहां मुख्य तालिका में जेसन फ़ील्ड हैं? जैसा कि आप जानते हैं, आप जेसन कॉलम के लिए समूह का उपयोग नहीं कर सकते हैं। – eyeinthebrick

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