我正在一个项目中,老师可以为学生分配徽章,这类似于成就系统。
现在,我试图概述没有特定徽章的学生,但是我使用的查询无法正常工作。
我制作了一个名为StudentHasBadge的表,其中保存了studentnumber
和badge_id
。
例:
我想显示一个没有“英语:阅读”标志的学生(学生编号,学生名字,姓氏)列表。
我使用以下查询:
(英语:阅读在我的数据库中具有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;