PostgreSQL中NULL值查询返回计数为0的问题求助
解决PostgreSQL中NULL值计数为0的问题
哦,这个坑我见太多了!你遇到的是SQL处理NULL值的经典误区——NULL不能用普通的=运算符来判断。
问题根源
在SQL的逻辑体系里,NULL代表的是「未知值」,而不是一个具体的数值或字符串。所以任何和NULL做=比较的结果都会是NULL(逻辑上等同于不成立),哪怕是NULL = NULL也不会返回true。这就导致你原来的查询语句中,user = (NULL)这个条件永远匹配不到任何数据,最终计数自然是0。
正确的查询语句
要判断字段是否为NULL,必须使用SQL标准的IS NULL语法,修改后的语句如下:
SELECT count(*) FROM database.table WHERE place_id = 3 AND user IS NULL;
额外补充
如果是在PostgreSQL中,还有一种备选写法(不过一般没必要,优先用上面的标准写法更清晰):
SELECT count(*) FROM database.table WHERE place_id = 3 AND user IS NOT DISTINCT FROM NULL;
IS NOT DISTINCT FROM会把NULL视为可比较的相等值,但对于单纯判断NULL的场景,IS NULL是更直观、更符合SQL规范的选择。
记住这个小口诀:判断NULL用IS,别用等于号,以后就不会再踩这个坑啦!
内容的提问来源于stack exchange,提问作者SUPARNA SOMAN
相关产品推荐
相关产品推荐

