sql >> Database >  >> RDS >> Oracle

Oracle LISTAGG() voor het opvragen van gebruik

Ten eerste is het bijna altijd efficiënter om alles in één verklaring te doen, indien mogelijk.

Uw tweede query werkt niet omdat u alles in een enkele tekenreeks retourneert. Dit is niet een door komma's gescheiden lijst zoals vereist door een IN-statement.

Er is echter een klein trucje om dit te omzeilen. Ervan uitgaande dat je de string gebruikt voor iets tussen de twee SELECT-instructies, kun je spelen met regexp_substr() om van je string iets bruikbaars te maken.

Zoiets zou werken;

select city
  from vwpersonprimaryaddress
 where state in ( 
           select regexp_substr(v_province,'[^'',]+', 1, level) 
             from dual
          connect by regexp_substr(v_province, '[^'',]+', 1, level) is not null
                  )

De variabele v_province zou moeten worden gewijzigd om twee keer geciteerd te worden, bijvoorbeeld '''AB'',''AZ'',''BC''' om dit te laten werken.

Hier is een werkvoorbeeld



  1. Diepe duik in NoSQL:een complete lijst van NoSQL-databases

  2. PostgreSQL - Functie met lokale variabelen - Kolomverwijzing is dubbelzinnig

  3. MySQL-deelnametabellen groeperen op somprobleem

  4. MySQL ENUM-type versus join-tabellen