where A||B in ( '1000%', '10001001','1099002' ) 같은 쿼리를 만들고 싶습니다. 0 5 1,519

by 네오스타 [2013.06.07 23:50:05]


안녕하세요. sql을 짜던 중 질문이 있어서 이렇게 글을 남기게 되었습니다.
[현재 상태]

A - 4자리 임의의 값(1000,10001,1099.. 등등)
B - 3자리 임의의 값(001,002,.. 등등)

select ~
from ~
where A||B in ( '1000001', '10001001','1099002' ) /* N개의 이런 형식으로 파라미터 값 넘어옴..*/

1. 위와 같이 넘어오는 파라미터를 A||B로 하니 인덱스를 타지 않아서 바꾸고 싶은데 어떻게 해야 할까요?

2. 예외 상황으로 '1000','1008' 같은 값이 파라미터로 넘어 올 수 있습니다.
그럼 like '1000%' 와 같이 처리가 되어야 하는데 이 케이스까지 함께 처리가 될 수 있을까요?

※ 만들고 싶은 상황 : where A||B in ('1000%', '10001001','1099002') 같이 한꺼번에 처리되는 결과값... 
   (인덱스도 탈 수 있음 좋아요)

이것 저것 해봤으나 도저히 제 능력 밖이라 이렇게 질문드립니다. 감사합니다.

by 야신 [2013.06.08 14:55:17]
A||B 로 이루어진 인덱스를 하나 추가하시면 두가지 문제가 다 해결될것 같습니다

by 네오스타 [2013.06.08 17:49:35]
우선 답변 감사드립니다.
하지만 파라미터가 '1000' 인 경우는 1000001,1000002.. 등 다 나와야 하는데
where A||B in ('1000%','1001001')  <-- 이 경우는 어떻게 해야 할까요?
    ( 저 문법대로 하면 IN 안에 '1000%'를 쓰면 에러나죠 )

by 손님 [2013.06.08 22:45:15]

where A||B in ('1000','1001001') 
  or A in ('1000','1001001') 

이렇게 조건이 걸리면 되지 않을까요?

by 야신 [2013.06.08 23:00:09]
제가 로그인 안한 상태로 댓글을 남겨 버렸네요..ㅡㅡ;;
위와 같이 input 파라미터를 두개의 조건절에 받으시면 될것 같습니다.
색 칠해진 것들이 각각 조건에 걸리게 되지요.

where A||B in ('1000','1001001')  
  or A in ('1000','1001001')  

A 컬럼용 인덱스 하나와
A||B 이렇게나 이루어진 인덱스가 하나 있으면 될것 같네요

by 네오스타 [2013.06.09 02:51:16]
야신님!! 질문에 답변 감사드립니다.
제가 원하던 답이었습니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입