2014-01-24 35 views
-1

我有兩個問題讓我有些困擾。mySQL中的過濾器

我有2個表格。

我想用這個表來運行2個不同的查詢,我嘗試了很多,但沒有成功。

查詢1: 過濾掉以前未參加過AL(年假)的員工,但該狀態目前僅等待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 AL待定不在列表中,因爲0001之前取過AL。

查詢2: 想過濾出員工沒有在記錄中採取AL,但有其他人離開,如MC,無薪,住院,產假。結果只有0003小姐C.因爲小姐D &小姐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表

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

感謝您的幫助。

+0

你能解釋一下術語「之前」和「現在」嗎? 然後創建一個包含示例數據的sqlfiddle.com鏈接。那麼它將會很有用...... – Damodaran

+0

我只想要結果status = pending,並且僱員沒有在表中記錄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

嗨達莫達蘭,感謝您的回答,第一個查詢工作精彩,是我想要的結果,你是一個天才,但第二個查詢我運行SQL它沒有記錄返回。 Employee表只存儲員工詳細信息,然後需要加入離開表,只是在離開表記錄時過濾掉哪個員工不帶AL,但已經帶走了其他人。我已經修改了我的問題,您可以參考。非常感謝,非常感謝。 – user2617464

+0

檢查此查詢: SELECT DISTINCT d.id,類型,狀態,名稱 FROM demo1的d INNER JOIN僱員E對e.id = d.id WHERE 類型<> 'AL' AND狀態= '截取' AND d.id NOT IN(SELECT id FROM demo1 WHERE type ='AL') – Damodaran

+0

是的,這是結果。謝謝。 – user2617464