2014-01-24 2 views
-1

나는 언젠가 나를 괴롭히는 2 가지 질문을 가지고있다.mySQL에서 필터

나는 2 개의 테이블을 가지고 있습니다.

그리고이 테이블을 사용하여 2 개의 다른 쿼리를 실행하고 싶습니다. 그러나 많은 노력을했지만 성공하지 못했습니다.

쿼리 1 : 이전에 AL (Annual Leave)을 수행하지 않은 직원을 필터링하지만 현재 상태가 AL 만 보류 중입니다.

SELECT employee_id, leave_status, leave_type_id 
FROM hs_hr_leave 
WHERE leave_status =2 
GROUP BY employee_id 

위의 예는 이전에 AL을 사용하기도했지만 이전에 찍은 AL 직원을 제외하는 방법을 모르겠습니다.

결과는 0002이어야합니다. AL 보류 중 & 0003 AL 보류 중입니다. 0001 0001 이전에 AL을 취했기 때문에 보류 중이 목록에 없습니다.

쿼리 2 : 직원을 필터링하지 않고 레코드에서 AL을 가져오고 다른 사용자는 MC, 지불, 입원, 출산과 같이 떠납니다. 결과는 단지 0003 Miss C. Miss D & Miss E는 전혀 휴업을하지 않기 때문에이 결과가 필요하지 않습니다.

다음과 같은 테이블 :

남기기 표

employee_id|leave_type|status 
0001  |AL  |Taken 
0001  |MC  |Taken 
0001  |AL  |Pending 
0001  |AL  |Schedule 
0002  |MC  |Pending 
0002  |AL  |Pending 
0003  |MC  |Pending 
0003  |Others |Taken 

직원 표 도와

employee_id|employee_name| 
0001  |Miss A  | 
0002  |Miss B  | 
0003  |Miss C  | 
0004  |Miss D  | 
0005  |Miss E  | 

감사합니다.

+0

"이전"및 "현재"라는 용어를 설명 할 수 있습니까 ?? 샘플 데이터가 포함 된 sqlfiddle.com 링크를 만듭니다. 그렇다면 유용 할 것입니다 .... – Damodaran

+0

결과 만 상태 보류 중이고 직원이 테이블에 AL 레코드를 가져 오지 않았 으면합니다. – user2617464

답변

0

쿼리 1 : 이전에 AL (연간 휴가)을받지 않은 직원을 필터링하지 만 현재 상태가 AL 만 보류 중입니다.

SELECT d.id, status, type, name 
FROM demo1 d INNER JOIN employee e ON e.id = d.id 
WHERE 
status ='Pending' AND 
type = 'AL' AND 
d.id NOT IN(
SELECT id 
FROM demo1 
WHERE type = 'AL' AND 
status ='Taken') 

SQLFIDDLE

직원을 필터링 할

은 더 전에 AL을 촬영합니다. 어떤 버그를 알려 경우 결과는 0003 미스 C.

SELECT d.id, type, status, name 
FROM demo1 d INNER JOIN employee e ON e.id = d.id 
WHERE 
d.id NOT IN(SELECT id FROM demo1 WHERE type = 'AL') AND type <> 'Others' 

SQLFIDDLE

, 난 당신이 게시 된 조건에 대한 명확하지 않다.

+0

안녕하세요 Damodaran, 답변을 주셔서 감사합니다, 첫 번째 쿼리가 훌륭하게 일하고, 그 결과는 내가 원하는, 당신은 천재지만, 두 번째 쿼리는 내가 레코드를 반환 SQL을 실행합니다. 직원 테이블에만 직원 정보를 저장 한 다음 휴가 테이블에 가입해야하며 어떤 직원도 테이블 레코드를 남겨 두지 않고 걸러 내야합니다. 다른 직원은 떠나야합니다. 내 질문을 수정 했으므로 참조 할 수 있습니다. 많은 고마움, 감사합니다. – user2617464

+0

확인이 쿼리 : 이 e.id = d.id WHERE 형 <> 'AL'AND 상태 = '카메라'AND ON 데모 1 D INNER 가입 직원 전자 구별 d.id, 유형, 상태, 이름 을 선택 d.id가 아님 (select id FROM demo1 WHERE type = 'AL') – Damodaran

+0

예, 결과입니다.고맙습니다. – user2617464