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

Oracle LISTAGG() til forespørgselsbrug

For det første er det næsten altid mere effektivt at gøre alt i en enkelt erklæring, hvis det overhovedet er muligt.

Din anden forespørgsel virker ikke, da du returnerer alt i en enkelt streng. Dette er ikke en kommasepareret liste som krævet af en IN-sætning.

Der er dog et lille trick for at komme uden om dette. Hvis du antager, at du bruger strengen til noget mellem de to SELECT-sætninger, kan du lege med regexp_substr() at gøre din streng til noget brugbart.

Sådan noget ville virke;

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
                  )

Variablen v_province skulle ændres for at blive citeret to gange, f.eks. '''AB'',''AZ'',''BC''' for at dette kan virke.

Her er et fungerende eksempel



  1. Selvstudium til SQL Server-tabelopdeling og -partitioner

  2. Find strengposition, og sæt dig sammen med en anden tabels række

  3. MySql REGEXP for at matche to kommaseparerede strenge

  4. Hvordan bruger man Django med ældre skrivebeskyttede databasetabeller med sammensatte primærnøgler?