我正在一个项目中,老师可以为学生分配徽章,这类似于成就系统。

现在,我试图概述没有特定徽章的学生,但是我使用的查询无法正常工作。

我制作了一个名为StudentHasBadge的表,其中保存了studentnumberbadge_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;

09-26 11:44