请问 mysql 中的一个字段为 null,不等比较总是 false

2018-09-04 14:58:39 +08:00
 cc959798

比如 table 中的字段 a 未 null,select * from t where a!=4,结果是查不出来的,为什么要这样设计的呢

2519 次点击
所在节点    问与答
11 条回复
yidinghe
2018-09-04 15:24:24 +08:00
momocraft
2018-09-04 15:27:35 +08:00
可以想成 null 是 nan 的非数字版..
msg7086
2018-09-04 16:05:09 +08:00
因为 NULL 不是一个「值」,而是「没有值」。「没有值」不满足「值不等于 4 」这个条件。
Mac
2018-09-04 16:07:34 +08:00
所以 mysql 尽量不要默认值是 NULL
kyuuseiryuu
2018-09-04 16:55:59 +08:00
一开始设计上的问题。如果是状态这种概念要避免出现 null 出现的,每个状态必须有特定含义,而且要有状态转移图啊。如果不能改表将 null 改成默认 0 之类的话,就只能程序上加上处理 null 的情况了。
sean328
2018-09-04 19:02:32 +08:00
sql 本身是三值逻辑的,除了 true、false 之外还有 unknow 来表示未知或者不适用,null 来表示 unknown, 如果包含有 null 值就不能简单的用 true 和 false 这种布尔类型来作为判定条件
hand515
2018-09-04 19:08:30 +08:00
is null or !=4
mmdsun
2018-09-05 08:35:18 +08:00
null 是没有值。where a!=4 and a is null
mmdsun
2018-09-05 08:36:26 +08:00
@mmdsun null 是没有值。where a!=4 or a is null。写错了尴尬
cc959798
2018-09-05 10:29:59 +08:00
@mmdsun 这样会破坏索引呀
mmdsun
2018-09-05 19:28:51 +08:00
@cc959798 我一般是不用不等于。写成 where (a in(1,2,3) or/and a is not/ null) 这种形式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/486027

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX