आप companies.legal_contacts
. की सूची को विभाजित कर सकते हैं रेगुलर एक्सप्रेशन का उपयोग करते हुए, फिर ईमेल पते प्राप्त करने के लिए संपर्कों के साथ परिणाम सेट में शामिल हों (ceo
प्राप्त करने के लिए दो बार जुड़ें mail भी) और फिर listagg
. का उपयोग करके ईमेल को फिर से संयोजित करें समारोह:
SELECT co.company_id, p1.email, LISTAGG(p2.email, ', ') WITHIN GROUP (ORDER BY p2.email)
FROM (
SELECT DISTINCT company_id, ceo, REGEXP_SUBSTR(legal_contacts, '[^, ]+', 1, LEVEL) AS single_contact
FROM COMPANIES
CONNECT BY REGEXP_SUBSTR(legal_contacts, '[^, ]+', 1, LEVEL) IS NOT NULL) co
LEFT JOIN CONTACTS p1 ON co.ceo = p1.person_id
LEFT JOIN CONTACTS p2 ON co.single_contact = p2.person_id
GROUP BY co.company_id, p1.email;
अगर companies.legal_contacts
कई मान हो सकते हैं, प्रदर्शन कारणों से नियमित अभिव्यक्ति का उपयोग थोड़ा बदल जाता है और आपको MULTISET का उपयोग करना चाहिए।