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]과 같이 구분을 주고싶습니다.
생각하신 쿼리는 두 조건이 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]이 출력되겠죠.