MYSQL WHERE NOT查询

时间:2017-06-27 16:28:30

标签: mysql sql select where

我正在开展一个项目,教师可以为学生分配徽章,这与成就系统相似。

现在我试图概述那些不具备特定徽章的学生,但我使用的查询无效。

我创建了一个名为StudentHasBadge的表,其中保存了studentnumberbadge_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,但它并没有给我一个不同的结果

3 个答案:

答案 0 :(得分:3)

您可以使用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;

答案 1 :(得分:1)

您应该使用NOT EXISTS

SELECT s.studentnumber, s.firstname, s.lastname 
FROM students s 
WHERE NOT EXISTS(SELECT 1 FROM student_has_badge
                 WHERE studentnumber = s.studentnumber
                 AND badge_id = 61);

答案 2 :(得分:-1)

不要用NOT这个词。只是参数<>或=!

SELECT DISTINCT s.studentnumber, 
                s.firstname, 
                s.lastname 

FROM students s 
JOIN student_has_badge shb ON s.studentnumber = shb.studentnumber 
WHERE 
shb.badge_id <> 61