sql >> Databasteknik >  >> RDS >> Oracle

Oracle LISTAGG() för frågeanvändning

För det första är det nästan alltid mer effektivt att göra allt i ett enda uttalande om det alls är möjligt.

Din andra fråga fungerar inte eftersom du returnerar allt till en enda sträng. Detta är inte en kommaavgränsad lista som krävs av en IN-sats.

Det finns dock ett litet knep för att komma runt detta. Om du antar att du använder strängen för något mellan de två SELECT-satserna kan du leka med regexp_substr() för att förvandla din sträng till något användbart.

Något sådant här skulle fungera;

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
                  )

Variabeln v_province skulle behöva ändras för att citeras två gånger, till exempel '''AB'',''AZ'',''BC''' för att detta ska fungera.

Här är ett fungerande exempel



  1. MySql-utlösare, uppdatera en annan tabell vid infogning

  2. Gå till SQL-drivrutin hämta gränssnitts{} kolumnvärden

  3. Är det begreppsmässigt rätt att göra ett SELECT MAX(id) etc. för att hitta den senast infogade raden?

  4. Fel Maximalt antal tecken överskrids i SQL-sats EDIT:Problem som visar tabell