我正在做一个教师可以给学生分配徽章的项目,它类似于成就系统。
现在我正在尝试了解没有特定徽章的学生的概况,但我使用的查询不起作用。
我创建了一个名为 StudentHasBadge 的表,其中保存了 studentnumber
和 badge_id
。
例子:我想显示没有“英语:阅读”徽章的学生列表(s.studentnumber、s.firstname、s.lastname)。
我使用以下查询:
(英文:Reading 在我的数据库中有 badge_id 61)
SELECT DISTINCT s.studentnumber, s.firstname, s.lastname
FROM students s INNER JOIN student_has_badge shb
ON s.studentnumber = shb.studentnumber
WHERE NOT shb.badge_id = 61
结果我也得到了获得徽章的学生
我也尝试了 !=
而不是 WHERE NOT
,但它并没有给我不同的结果
您可以使用 LEFT JOIN
并检查是否匹配:
SELECT s.studentnumber, s.firstname, s.lastname
FROM students s LEFT JOIN
student_has_badge shb
ON s.studentnumber = shb.studentnumber AND shb.badge_id = 61
WHERE shb.studentnumber IS NULL;
我是一名优秀的程序员,十分优秀!