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