sql >> Databáze >  >> RDS >> Oracle

Oracle LISTAGG() pro dotazování

Za prvé, je téměř vždy efektivnější dělat vše v jediném příkazu, pokud je to vůbec možné.

Váš druhý dotaz nefunguje, protože vše vracíte do jednoho řetězce. Toto není seznam oddělený čárkami, jak to vyžaduje příkaz IN.

Existuje malý trik, jak to obejít. Za předpokladu, že používáte řetězec pro něco mezi dvěma příkazy SELECT, můžete si pohrát s regexp_substr() proměnit váš řetězec v něco použitelného.

Něco takového by fungovalo;

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
                  )

Proměnná v_province by muselo být změněno, aby bylo citováno dvakrát, například '''AB'',''AZ'',''BC''' aby to fungovalo.

Zde je pracovní příklad



  1. Jak mohu porovnat poslední dvě slova ve větě v PostgreSQL?

  2. Seskupte příspěvky podle data ve Wordpressu

  3. Volání uložených procedur z Javy

  4. Nejprve MySql a Entity Framework Code