You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询employees表中指定日期未在emp_attend表出现的员工数据

解决指定日期未出勤员工的查询问题

我来帮你搞定这个查询问题~你原来的语句之所以会返回所有员工,是因为OR emp_attend.date != ?这个条件出了问题:当员工在其他日期有出勤记录时,这条记录会满足date != 指定日期,从而让整个条件成立,导致这些员工也被筛选出来,这显然不是你想要的结果。

下面给你两种正确的解决方案:

方案一:在LEFT JOIN的关联条件中加入日期筛选

把日期条件放到LEFT JOIN的ON子句里,这样只会关联员工指定日期的出勤记录,之后再筛选出关联不上的员工(也就是该日期没有出勤记录的员工):

String selectQuery = "SELECT \n" + 
                     "employees.emp_id, employees.first_name, employees.last_name \n" + 
                     "FROM employees \n" + 
                     "LEFT JOIN emp_attend ON emp_attend.emp_id = employees.emp_id AND emp_attend.date = ? \n" + 
                     "WHERE emp_attend.emp_id IS NULL";

方案二:使用NOT EXISTS子查询(逻辑更清晰)

直接判断员工在指定日期不存在出勤记录,这种方式的可读性更强,性能也很稳定:

String selectQuery = "SELECT \n" + 
                     "employees.emp_id, employees.first_name, employees.last_name \n" + 
                     "FROM employees \n" + 
                     "WHERE NOT EXISTS ( \n" + 
                     "    SELECT 1 FROM emp_attend \n" + 
                     "    WHERE emp_attend.emp_id = employees.emp_id AND emp_attend.date = ? \n" + 
                     ")";

这两种方法都能准确筛选出:要么从来没有在emp_attend表登记过,要么指定日期没有登记出勤的员工。

内容的提问来源于stack exchange,提问作者Roger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:13:22