Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle 12:ingressar na lista separada por vírgulas?


você pode dividir a lista de companies.legal_contacts usando expressão regular, junte o conjunto de resultados com os contatos para obter os endereços de e-mail (junte-se duas vezes para obter ceo mail também) e então re-concatene os e-mails usando listagg função:
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;

se os companies.legal_contacts pode conter muitos valores, o uso de expressão regular muda um pouco por questões de desempenho e você deve usar um MULTISET.