sql 中不等1于过滤掉了null值

【 TiDB 使用环境】生产环境 /测试/ Poc
我这有个简单查询的sql
select id,channel from t_bike_unbind_part where vin = ‘LR4DE1SB6N2033237’
查询出来channel 有null正常显示
select id,channel from t_bike_unbind_part where vin = ‘LR4DE1SB6N2033237’ and channel <> ‘1’
加了一个过滤条件不等于1,结果是null的值都被过滤掉了,这个是为什么?




因为 NULL和其他字符串比较返回的都是NULL

我们这边规范是要求对于可能为null的字段都要加IFNULL

IFNULL(channel,'') <> '1'

2 个赞

根据三值逻辑中的Null真理值定理,Null值既不等于真也不等于假,因此它不等于任何非Null值(包括1),null不能等于或者不等于,基本上数据库都是这个处理逻辑

1 个赞

mysql也是这样的,又学到了。

oracle里面空字符串和null是一样的,mysql里面不一样

:handshake: :handshake: :handshake:

这个跟空串没关系啊,说的是null

最好字段非空有默认值

:joy:理想很美好,现实很骨感。。。每个人的习惯不一样,今天加个字段明天加个字段,慢慢就控制不住了。

空值不参与任何比较

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。