sql >> Database teknologi >  >> RDS >> Oracle

Oracle 12:Deltag på kommasepareret liste?

du kan opdele listen over companies.legal_contacts ved hjælp af regulært udtryk, tilslut derefter resultatsættet med kontakter for at få e-mail-adresserne (deltag to gange for at få ceo mail også) og sammenkæde derefter e-mails igen ved hjælp af listagg funktion:

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;

hvis companies.legal_contacts kan indeholde mange værdier, brugen af ​​regulære udtryk ændrer sig en smule af præstationsmæssige årsager, og du skal bruge et MULTISET.



  1. Hvordan gemmer man arrays i MySQL?

  2. Sådan opretter du pivottabel i PostgreSQL

  3. Tilføj 2 måneder til det nuværende tidsstempel

  4. Hvad er PLSQL-poster i Oracle