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

如何用SQL从用户表与出勤表中筛选缺勤人员?

解决缺勤人员SQL查询问题

原SQL的问题所在

  • 用了INNER JOIN:这种连接仅返回两张表user_id完全匹配的记录,因此users.user_id不可能为NULL,自然查不到结果。
  • 查询起点错误:缺勤人员是不在user_attendance表中的用户,应该以users表作为主表查询。

正确的缺勤人员查询方法

方法1:LEFT JOIN + 空值筛选

SELECT users.*
FROM users
LEFT JOIN user_attendance ON users.user_id = user_attendance.user_id
WHERE user_attendance.user_id IS NULL;

逻辑:LEFT JOIN会保留users表的所有用户记录,对于未出勤的用户,user_attendance表对应的字段会是NULL,通过筛选这个空值就能得到缺勤人员。

方法2:NOT EXISTS子查询

SELECT users.*
FROM users
WHERE NOT EXISTS (
    SELECT 1
    FROM user_attendance
    WHERE user_attendance.user_id = users.user_id
);

逻辑:逐个检查users表的用户,只要该用户未出现在user_attendance表中,就返回这条记录。

出勤人员查询(附)

如果需要查询出勤人员,可用以下两种方式:

-- 方式1:INNER JOIN
SELECT DISTINCT users.*
FROM users
INNER JOIN user_attendance ON users.user_id = user_attendance.user_id;
-- 方式2:EXISTS子查询
SELECT users.*
FROM users
WHERE EXISTS (
    SELECT 1
    FROM user_attendance
    WHERE user_attendance.user_id = users.user_id
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:35:21