두개의 쿼리를 하나로 합치려고합니다. 0 2 1,160

by 지침 [2016.08.11 00:56:40]


1.
select
	idx,id,state
from member
where 
	state = '1' or state = '2'
and closeTime < '현재시간';

2.
select
	idx,id,state
from member
where 
	state = '2'
and waitTime < '현재시간';

첫번째 쿼리와 두번째 쿼리를 합치고 싶습니다.

그래서 생각해본 쿼리는..

 

select
	idx,id,state
from member
where 
      ( (state = '1' or state = '2') AND (closeTime < '현재시간') ) <=== [1]	
and   ( (state = '2') AND (waitTime < '현재시간') )  <===[2]

 


이런식으로 합치면 두개 합친 값이 나올듯한데 문제는 [1]에서 나온값과 [2]에서 나온값이 구분할수없습니다.
이것을 [1]에서 나온값인지 [2]에서 나온값인지 구분을 할수있을까요?
아 그리고 [1]에서 state = 2와 [2]에서 state = 2가 같기때문에 두개의 조건이 다 성립하게 되면 값이 두개가 나오는데 하나로 합쳐서 [1]과 같이 구분을 주고싶습니다.

by jkson [2016.08.11 08:09:51]

생각하신 쿼리는 두 조건이 AND 조건이므로 사실상

SELECT IDX, ID, STATE
  FROM MEMBER
 WHERE STATE = '2'
   AND CLOSETIME < '현재시간'
   AND WAITTIME < '현재시간'

이 쿼리와 같구요.

쿼리를 합친다고 하셨으므로 두개의 조건이 OR로 묵여야겠죠.


SELECT IDX, ID, STATE
  FROM MEMBER
 WHERE ((STATE = '1'OR STATE = '2') AND CLOSETIME < '현재시간')
    OR (STATE = '2' AND WAITTIME < '현재시간')

그리고 1번 조건과 2번 조건을 구분하기 위해 구분자를 추가하면

SELECT IDX, ID, STATE
       CASE WHEN ((STATE = '1'OR STATE = '2') AND CLOSETIME < '현재시간') THEN '[1]'
            WHEN (STATE = '2' AND WAITTIME < '현재시간') THEN '[2]'
       END GB
  FROM MEMBER
 WHERE ((STATE = '1'OR STATE = '2') AND CLOSETIME < '현재시간')
    OR (STATE = '2' AND WAITTIME < '현재시간')

CASE 문에서 1조건이 먼저 타기 때문에 1과 2 모두 해당하더라도 [1]이 출력되겠죠.


by 지침 [2016.08.11 14:53:51]

jkson님 감사합니다 ^^ 

OR이였군요..덕분에 해결할수있었습니다.

좋은하루 되세요~

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