Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle LISTAGG() zum Abfragen verwenden

Erstens ist es fast immer effizienter, alles möglichst in einer einzigen Anweisung zu erledigen.

Ihre zweite Abfrage funktioniert nicht, da Sie alles in einer einzigen Zeichenfolge zurückgeben. Das ist nicht eine kommagetrennte Liste, wie sie von einer IN-Anweisung verlangt wird.

Es gibt jedoch einen kleinen Trick, um dies zu umgehen. Angenommen, Sie verwenden die Zeichenfolge für etwas zwischen den beiden SELECT-Anweisungen, können Sie mit regexp_substr() um Ihren String in etwas Brauchbares zu verwandeln.

So etwas würde funktionieren;

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
                  )

Die Variable v_province müsste geändert werden, um zweimal in Anführungszeichen gesetzt zu werden, zum Beispiel '''AB'',''AZ'',''BC''' damit das funktioniert.

Hier ist ein Arbeitsbeispiel