【发布时间】:2017-06-27 16:28:29
【问题描述】:
我正在开展一个项目,教师可以为学生分配徽章,它类似于成就系统。
现在我正在尝试了解没有特定徽章但我使用的查询不起作用的学生的概况。
我创建了一个名为 StudentHasBadge 的表,其中保存了 studentnumber 和 badge_id。
示例: 我想显示没有“英语:阅读”徽章的学生列表(s.studentnumber、s.firstname、s.lastname)。
我使用以下查询:
(英文:Reading has badge_id 61 in my database)
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,但它并没有给我不同的结果
【问题讨论】:
-
只是为了解释你得到的结果;您的查询要求获得徽章 61 以外的徽章的学生。这包括获得徽章 61 和至少一个其他徽章的学生。至于答案,我支持戈登的;它是最直接的,并且可能具有最好的性能。