mySQL中的过滤器

mySQL中的过滤器,mysql,join,nested,Mysql,Join,Nested,我有两个问题有时会困扰我 我有两张桌子 我想用这个表运行两个不同的查询,我尝试了很多,但都没有成功 问题1: 筛选出以前未休年假但当前状态仅为“待定”的员工 SELECT employee_id, leave_status, leave_type_id FROM hs_hr_leave WHERE leave_status =2 GROUP BY employee_id SELECT d.id, status, type, name FROM demo1 d INNER JOIN empl

我有两个问题有时会困扰我

我有两张桌子

我想用这个表运行两个不同的查询,我尝试了很多,但都没有成功

问题1: 筛选出以前未休年假但当前状态仅为“待定”的员工

SELECT employee_id, leave_status, leave_type_id
FROM hs_hr_leave
WHERE leave_status =2
GROUP BY employee_id  
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') 
上面,以前拿过AL的也出来了,但我不知道如何排除以前拿过AL的员工

结果应为0002 AL待定和0003 AL待定。 0001 AL Pending不在列表中,因为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_id|employee_name|
0001       |Miss A       |
0002       |Miss B       |
0003       |Miss C       |
0004       |Miss D       |
0005       |Miss E       |

感谢您的帮助。

查询1:筛选出以前没有休年假,但当前状态仅为“待定”的员工

SELECT employee_id, leave_status, leave_type_id
FROM hs_hr_leave
WHERE leave_status =2
GROUP BY employee_id  
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') 
希望筛选出以前未采取行动的员工。结果只有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.com链接。然后它会很有用……我只想要结果status=pending,表中的员工没有记录。嗨,Damodaran,谢谢你的回答,第一个查询工作很好,这是我想要的结果吗,你是个天才,但第二个查询我运行SQL,它返回时没有记录。员工表只存储员工详细信息,然后需要加入休假表,只需筛选出哪些员工没有休假表记录,但有休假。我已经修改了我的问题,您可以参考。非常感谢,非常感谢。检查此查询:从demo1中选择不同的d.id、类型、状态、名称,并在e.id=d.id上选择内部加入员工e,其中类型为'AL',状态为'take',而d.id不在demo1中选择id,其中类型为'AL',是,这是结果。非常感谢。