在WHERE子句中使用<>(不相等)时,MySQL查询传递错误的结果

时间:2019-10-21 13:29:30

标签: mysql sql

我遇到了一个MySQL查询的奇怪问题

SELECT COUNT(id) FROM members
100

SELECT COUNT(id) FROM members WHERE lastname = 'Smith'
20

SELECT COUNT(id) FROM members WHERE lastname <> 'Smith'
0

问题是,最后一个查询(姓氏为“ Smith”的成员)返回0。

如果总共有100个成员,而名为'Smith'的成员共有20个,那么其他姓氏的成员应该是80个,不是吗?

我尝试使用<>!=使用不同的版本,将Smith括在'"中。改为使用LIKENOT LIKE时的结果是相同的。

这怎么可能?似乎我遗漏了一些明显的东西,但是...?

1 个答案:

答案 0 :(得分:3)

因为其他人为空

尝试:

SELECT COUNT(id) FROM members WHERE IFNULL(lastname ,'--')<> 'Smith'

示例:

CREATE TABLE my_table 
SELECT 'ersin' name  FROM dual
union all
SELECT 'ersin' name  FROM dual
union all
SELECT 'ersin' name  FROM dual
union all
SELECT null name  FROM dual
union all
SELECT null name  FROM dual
union all
SELECT null name  FROM dual;

选择脚本:

select count(*) from my_table where IFNULL(name ,'--') <> 'ersin' ;

输出:

count(*)
3