Thứ nhất, hầu như luôn luôn hiệu quả hơn khi thực hiện mọi thứ trong một câu lệnh duy nhất nếu có thể.
Truy vấn thứ hai của bạn không hoạt động vì bạn đang trả lại mọi thứ thành một chuỗi duy nhất. Đây không phải là không danh sách được phân tách bằng dấu phẩy theo yêu cầu của câu lệnh IN.
Có một mẹo nhỏ để giải quyết vấn đề này. Giả sử bạn đang sử dụng chuỗi cho thứ gì đó giữa hai câu lệnh SELECT, bạn có thể sử dụng regexp_substr()
để biến chuỗi của bạn thành một cái gì đó có thể sử dụng được.
Một cái gì đó như thế này sẽ hoạt động;
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
)
Biến v_province
sẽ phải được thay đổi để được trích dẫn hai lần, ví dụ:'''AB'',''AZ'',''BC'''
để điều này hoạt động.
Đây là ví dụ hoạt động