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

如何在MySQL中查询无学员报名的课程名称

查询无学员报名的课程名称

这里有几种常用的SQL写法可以实现你的需求,我会逐一说明(先假设你的第二张学员报名表名为tbl_student_enrollment,如果实际表名不同,替换成对应名称即可;另外你提到的student id字段应该是student_id吧?如果实际字段带空格,记得用反引号包裹,比如`student id`):

方法一:左连接(LEFT JOIN)+ 空值判断

左连接会保留课程表的所有记录,关联报名表后,无报名记录的课程对应的报名字段会是NULL,我们筛选这些记录即可:

SELECT c.course_name
FROM tbl_course c
LEFT JOIN tbl_student_enrollment se ON c.id = se.course_id
WHERE se.course_id IS NULL;

解释:LEFT JOIN确保tbl_course的每一行都被包含,哪怕在报名表中没有匹配的course_id。WHERE se.course_id IS NULL精准筛选出没有任何学员报名的课程。

方法二:NOT EXISTS子查询

这种写法逻辑更直观,检查每一门课程是否不存在对应的报名记录:

SELECT c.course_name
FROM tbl_course c
WHERE NOT EXISTS (
    SELECT 1
    FROM tbl_student_enrollment se
    WHERE se.course_id = c.id
);

解释:子查询会针对每门课程验证是否有学员报名,如果子查询返回空(即无报名记录),NOT EXISTS就会选中这门课程。

方法三:NOT IN子查询

注意:如果报名表的course_id存在NULL值,NOT IN会返回空结果,所以使用前要确保course_id无NULL:

SELECT course_name
FROM tbl_course
WHERE id NOT IN (
    SELECT DISTINCT course_id
    FROM tbl_student_enrollment
    WHERE course_id IS NOT NULL -- 避免NULL干扰结果
);

解释:先从报名表中提取所有有学员报名的课程ID(去重),再筛选出课程表中不在这个列表里的课程名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:42