검색 AB,BA 이런식으로 역으로 검색이 되나요? 1 7 1,072

by 혜당화 [2015.09.04 14:43:57]


구간에 관한 DB가 있습니다.

AREA1  AREA2 AREA3 AREA4

이런식으로 4구간까지 있구요.

 

검색으로 서울,경기,인천 입력시

AREA1  AREA2 AREA3 까지 검색을 하는데 문제가 있습니다.

입력한 순서대로 1=서울,2=경기,3=인천 이런식이 아니라

1=서울,2=인천,3=경기

이렇게 된 것도 찾아와야 하고

1=인천,2=경기,3=서울 이렇게 된것도 찾아와야 합니다.

한마디로 입력순서대로가 아닌 AREA1  AREA2 AREA3 아무렇게나 들어있어도

서울,경기,인천 만 맞으면 OK라는 것입니다.

이런식으로 검색을 할려면 필수한 함수나 쿼리에 조언을 부탁드립니다. 

 

 

 

by jkson [2015.09.04 15:06:26]
입력값 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)

 


by 마농 [2015.09.04 15:26:34]
SELECT *
  FROM t
 WHERE :v_area1 IN (area1, area2, area3, area4)
   AND :v_area2 IN (area1, area2, area3, area4)
   AND :v_area3 IN (area1, area2, area3, area4)
;

 


by jkson [2015.09.04 15:33:05]

아!!! 저는 왜케 단순할까요?ㅋ 또 뒤통수 맞는 느낌ㅋ


by 혜당화 [2015.09.04 16:25:46]

마농님 항상 답변을 통해서 많이 배웁니다.

감사합니다


by 마농 [2015.09.07 14:54:42]
-- 조건값이 가변적으로 선택되어 들어오는 경우 --
SELECT *
  FROM t
 WHERE NVL(:v_area1, 'x') IN (area1, area2, area3, area4, 'x')
   AND NVL(:v_area2, 'x') IN (area1, area2, area3, area4, 'x')
   AND NVL(:v_area3, 'x') IN (area1, area2, area3, area4, 'x')
   AND NVL(:v_area4, 'x') IN (area1, area2, area3, area4, 'x')
;

 


by 연쇄삽입범 [2015.09.07 17:14:04]
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')
;
 
이렇게 테이블 만들어서 테스트 해봤는데 결과값이 이상하게 나오는것같아여 ㅠㅠ
제가 뭔가 잘못하긴 한거 같은데 뭔지 모르겠습니다 ㅠ

by 마농 [2018.06.04 15:32:08]

따옴표가 없네요.
 - 수정전 : &v_a1
 - 수정후 : '&v_a1'

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입