V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cc959798
V2EX  ›  问与答

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

  •  
  •   cc959798 · 2018-09-04 14:58:39 +08:00 · 2588 次点击
    这是一个创建于 2267 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 条回复    2018-09-05 19:28:51 +08:00
    momocraft
        2
    momocraft  
       2018-09-04 15:27:35 +08:00
    可以想成 null 是 nan 的非数字版..
    msg7086
        3
    msg7086  
       2018-09-04 16:05:09 +08:00
    因为 NULL 不是一个「值」,而是「没有值」。「没有值」不满足「值不等于 4 」这个条件。
    Mac
        4
    Mac  
       2018-09-04 16:07:34 +08:00
    所以 mysql 尽量不要默认值是 NULL
    kyuuseiryuu
        5
    kyuuseiryuu  
       2018-09-04 16:55:59 +08:00 via iPhone
    一开始设计上的问题。如果是状态这种概念要避免出现 null 出现的,每个状态必须有特定含义,而且要有状态转移图啊。如果不能改表将 null 改成默认 0 之类的话,就只能程序上加上处理 null 的情况了。
    sean328
        6
    sean328  
       2018-09-04 19:02:32 +08:00
    sql 本身是三值逻辑的,除了 true、false 之外还有 unknow 来表示未知或者不适用,null 来表示 unknown, 如果包含有 null 值就不能简单的用 true 和 false 这种布尔类型来作为判定条件
    hand515
        7
    hand515  
       2018-09-04 19:08:30 +08:00
    is null or !=4
    mmdsun
        8
    mmdsun  
       2018-09-05 08:35:18 +08:00 via Android
    null 是没有值。where a!=4 and a is null
    mmdsun
        9
    mmdsun  
       2018-09-05 08:36:26 +08:00 via Android
    @mmdsun null 是没有值。where a!=4 or a is null。写错了尴尬
    cc959798
        10
    cc959798  
    OP
       2018-09-05 10:29:59 +08:00
    @mmdsun 这样会破坏索引呀
    mmdsun
        11
    mmdsun  
       2018-09-05 19:28:51 +08:00 via Android
    @cc959798 我一般是不用不等于。写成 where (a in(1,2,3) or/and a is not/ null) 这种形式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3454 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.