Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle 12:Dołącz do listy rozdzielanej przecinkami?

możesz podzielić listę companies.legal_contacts używając wyrażenia regularnego, a następnie dołącz do zestawu wyników z kontaktami, aby uzyskać adresy e-mail (dołącz dwukrotnie, aby uzyskać ceo poczty), a następnie ponownie połącz e-maile za pomocą listagg funkcja:

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;

jeśli companies.legal_contacts może zawierać wiele wartości, użycie wyrażeń regularnych zmienia się nieco ze względu na wydajność i musisz użyć MULTISET.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ustawienie Oracle na domyślny schemat użytkownika (bez zmiany sesji)

  2. Jak naprawić jednowierszowe podzapytanie Ora-01427 zwraca więcej niż jeden wiersz w zaznaczeniu?

  3. Zapytanie Oracle do pobrania nazw kolumn

  4. Jak skonfigurować katalog docelowy dziennika archiwum w bazie danych Oracle

  5. Jaka jest różnica między funkcjami RANK() i DENSE_RANK() w Oracle?