Po pierwsze, prawie zawsze efektywniej jest zrobić wszystko w jednym oświadczeniu, jeśli to w ogóle możliwe.
Drugie zapytanie nie działa, ponieważ zwracasz wszystko w jednym ciągu. To nie lista rozdzielana przecinkami zgodnie z wymaganiami instrukcji IN.
Jest jednak mały trik, aby to obejść. Zakładając, że używasz ciągu do czegoś pomiędzy dwoma instrukcjami SELECT, możesz pobawić się regexp_substr()
aby zmienić swój ciąg w coś użytecznego.
Coś takiego by zadziałało;
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
)
Zmienna v_province
musiałby zostać zmieniony, aby był cytowany dwukrotnie, na przykład '''AB'',''AZ'',''BC'''
aby to zadziałało.
Oto przykład pracy