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

如何用SQL查询指定学生未选修的课程ID

解决指定学生未选修课程的SQL查询问题

原查询语句的问题

你的SQL逻辑存在两处关键错误:

  1. JOIN条件未限定目标用户:仅关联course_ID会把所有用户的选课记录和课程表关联,无法精准定位到user_ID=03的选课情况。
  2. WHERE条件逻辑矛盾:LEFT JOIN后,未被该学生选修的课程对应的table2字段全为NULL,而NULL != '03'的判断结果为UNKNOWN,会直接过滤掉这些我们需要的行,导致结果为空或错误。

正确的查询方法

方法一:LEFT JOIN 带用户关联条件

将用户筛选条件放在JOIN子句中,而非WHERE,确保仅关联目标学生的选课记录:

SELECT table1.course_ID, table1.courseName
FROM table1
LEFT JOIN table2 
  ON table1.course_ID = table2.course_ID 
  AND table2.user_ID = '03'
WHERE table2.course_ID IS NULL;

这个逻辑是:让课程表和学生03的选课记录做左关联,未匹配上的课程就是该学生未选修的。

方法二:NOT EXISTS 子查询(逻辑更直观)

直接查询“不存在该学生选修记录”的课程:

SELECT table1.course_ID, table1.courseName
FROM table1
WHERE NOT EXISTS (
  SELECT 1 
  FROM table2 
  WHERE table2.course_ID = table1.course_ID 
    AND table2.user_ID = '03'
);

方法三:NOT IN 子查询

先获取学生03已选修的课程ID,再查询不在这个列表里的课程:

SELECT table1.course_ID, table1.courseName
FROM table1
WHERE table1.course_ID NOT IN (
  SELECT course_ID 
  FROM table2 
  WHERE user_ID = '03'
);

注意:如果table2的course_ID存在NULL值,NOT IN会返回空结果,这种场景下优先用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:05:06