sql >> Databasteknik >  >> RDS >> Oracle

Oracle 12:Gå med på kommaseparerad lista?

du kan dela upp listan över companies.legal_contacts använd reguljärt uttryck och slå sedan samman resultatuppsättningen med kontakter för att få e-postadresserna (gå med två gånger för att få ceo mail också) och sammanfoga sedan e-postmeddelandena igen med 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;

om companies.legal_contacts kan innehålla många värden, användningen av reguljära uttryck ändras lite av prestandaskäl och du måste använda en MULTISET.



  1. Topp 9 användbara Oracle Apps-skrivarfrågor

  2. Hur sammanfogar man många rader med samma id i sql?

  3. PostgreSQL :cast sträng till datum DD/MM/ÅÅÅÅ

  4. Spåra hög tillgänglighet för PostgreSQL med hjärtslag