Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle 12 :Joindre une liste séparée par des virgules ?

vous pouvez diviser la liste des companies.legal_contacts en utilisant une expression régulière, puis rejoignez le jeu de résultats avec les contacts pour obtenir les adresses e-mail (joindre deux fois pour obtenir ceo mail aussi) puis reconcaténer les e-mails en utilisant listagg fonction :

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;

si le companies.legal_contacts peut contenir de nombreuses valeurs, l'utilisation des expressions régulières change un peu pour des raisons de performances et vous devez utiliser un MULTISET.