sql >> Databáze >  >> RDS >> Oracle

Oracle 12:Připojit se na seznam oddělený čárkami?

můžete rozdělit seznam companies.legal_contacts pomocí regulárního výrazu, poté připojte sadu výsledků s kontakty, abyste získali e-mailové adresy (připojte se dvakrát a získejte ceo mail taky) a poté znovu zřetězit e-maily pomocí listagg funkce:

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;

pokud companies.legal_contacts může obsahovat mnoho hodnot, použití regulárního výrazu se trochu mění z důvodu výkonu a musíte použít MULTISET.



  1. Sloupec je ve výběrovém seznamu neplatný, protože není obsažen v agregační funkci ani v klauzuli GROUP BY

  2. Oracle SQL, jak odstranit čas z data

  3. Oracle.DataAccess.dll nelze najít, ačkoli existuje

  4. Jak mohu předat parametr skriptu t-sql?