SQL IS NOT NULL不起作用

时间:2017-10-02 14:02:01

标签: mysql sql mysql-workbench

我正在尝试编写一个简短的SQL查询(在MySQL Workbench中),如果一个学生因多个学生失败而输出失败次数。

这是我的尝试:

SELECT CONCAT(area, yearlevel, code) AS SubjectCode, Count(student)
FROM StudentTakesSubject
WHERE result < 50 AND result <> NULL
GROUP BY code
HAVING Count(Student) > 1;

问题是它一直输出包含Null记录的计数,即使我在查询中指定不计算它们(或者至少我以为我做了......)。

编辑: 这是GROUP BY条款出错了!正如 Gordon Linoff 在他的回答中指出的那样,应该是GROUP BY SubjectCode并且神奇地解决了这个问题。

感谢大家的建设性见解。

3 个答案:

答案 0 :(得分:6)

正如所写:

SELECT CONCAT(area, yearlevel, code) AS SubjectCode, Count(student)
FROM StudentTakesSubject
WHERE result < 50 AND result <> NULL
GROUP BY code
HAVING Count(Student) > 1;

此查询不应返回任何行。为什么? result <> NULL返回NULL作为布尔值(近似值与NULL的所有比较返回NULL)。 AND NULL评估NULL - 而NULL不正确。所有行都被过滤掉了。

NULL比较实际上是多余的。 result < 50也会过滤掉NULL个值。

查看查询的其余部分,您还有另一个问题。 GROUP BY位于code。它应该在SubjectCode上 - CONCAT()的结果。事实上,当连接不同的列时,我建议使用分隔符,比如说CONCAT_WS(':', area, yearlevel, code)。当然,对于这种特殊情况,分离器可能并不合适。

答案 1 :(得分:0)

result NOT NULL代替result <> NULL

SELECT CONCAT(area, yearlevel, code) AS SubjectCode, Count(student)
FROM StudentTakesSubject
WHERE result < 50 
AND result NOT NULL
GROUP BY code
HAVING Count(Student) > 1;

答案 2 :(得分:0)

结果<> NULL无效,为什么?

  

当您比较非空表达式时,如果左边的结果为TRUE   操作数不等于右操作数;否则,结果是   错。

选中此link以获得更多详细信息。

相关问题