社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

Mysql select在返回结果时忽略空值

multimediaxp • 3 年前 • 1290 次点击  

我有一个表,其中一列除了一行外大部分为空。

ID STATUS VALUE POS
1  'BAD'   200   0 
2   NULL   200   0
3   NULL   300   1
4   'OK'    0    2

如果我这样做了

Select * from table where STATUS != 'OK'

我想

ID STATUS VALUE POS 
1  'BAD'   200   0
2   NULL   200   0
3   NULL   300   1

但我明白

ID STATUS VALUE POS 
1  'BAD'   200   0

我想知道为什么,我知道我可以做其他事情,比如ID=4,但是为什么上面的查询返回空值的结果?

谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130342
 
1290 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Paul Maxwell
Reply   •   1 楼
Paul Maxwell    3 年前

不能对空值使用“相等”或“不相等”

必须 使用 IS NULL IS NOT NULL 例如:

Select * from table where STATUS != 'OK' OR Status IS NULL
Akina
Reply   •   2 楼
Akina    3 年前

与空比较总是空的。将NULL视为“未知值”。是否有未知值不等于“OK”?这是未知的。。。所以结果是空的。

在逻辑表达式中,NULL被视为FALSE。因此,您不会收到想要接收的行。

必须对空值应用附加检查( WHERE status != 'OK' OR status IS NULL )或者在比较之前将空值转换为某个确定的常量值( WHERE COALESCE(status, '') != 'OK' ).

注意——这种解释不同于检查约束(包括外键约束)中使用的解释,在检查约束中,空值被视为“匹配”。