我遇到了一个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
括在'
或"
中。改为使用LIKE
和NOT LIKE
时的结果是相同的。
这怎么可能?似乎我遗漏了一些明显的东西,但是...?
答案 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