구간에 관한 DB가 있습니다.
AREA1 AREA2 AREA3 AREA4
이런식으로 4구간까지 있구요.
검색으로 서울,경기,인천 입력시
AREA1 AREA2 AREA3 까지 검색을 하는데 문제가 있습니다.
입력한 순서대로 1=서울,2=경기,3=인천 이런식이 아니라
1=서울,2=인천,3=경기
이렇게 된 것도 찾아와야 하고
1=인천,2=경기,3=서울 이렇게 된것도 찾아와야 합니다.
한마디로 입력순서대로가 아닌 AREA1 AREA2 AREA3 아무렇게나 들어있어도
서울,경기,인천 만 맞으면 OK라는 것입니다.
이런식으로 검색을 할려면 필수한 함수나 쿼리에 조언을 부탁드립니다.
입력값 3개만 조합된다면 그냥 간단하게 다 기술해주는 것도 괜찮은 것 같은데요.. with t as ( select '경기' area1, '인천' area2, '서울' area3 from dual union all select '경기' area1, '서울' area2, '인천' area3 from dual union all select '서울' area1, '경기' area2, '인천' area3 from dual union all select '인천' area1, '경기' area2, '서울' area3 from dual union all select '경상도' area1, '거창' area2, '경남' area3 from dual union all select '안동' area1, '경상도' area2, '경북' area3 from dual ) select * from t where :area1||','||:area2||','||:area3 in ( area1||','||area2||','||area3, area1||','||area3||','||area2, area2||','||area3||','||area1, area2||','||area1||','||area3, area3||','||area2||','||area1, area3||','||area1||','||area2)
with
t
as
(
select
'서울'
area1,
'경기'
area2,
'인천'
area3 ,'강원' area4
from
dual
union
all
select
'인천'
area1,
'강원'
area2,
'서울'
area3
, '경기' area4 from
dual
union
all
select
'경기'
area1,
'인천'
area2,
'강원'
area3
, '서울' area4 from
dual
union
all
select
'강원'
area1,
'서울'
area2,
'경기'
area3
, '인천' area4 from
dual
)
SELECT
*
FROM
t
WHERE
NVL(&v_a1,
'x'
)
IN
(area1, area2, area3, area4,
'x'
)
AND
NVL(&v_a2,
'x'
)
IN
(area1, area2, area3, area4,
'x'
)
AND
NVL(&v_a3,
'x'
)
IN
(area1, area2, area3, area4,
'x'
)
AND
NVL(&v_a4,
'x'
)
IN
(area1, area2, area3, area4,
'x'
)
;