cc959798
V2EX  ›  问与答

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

  •  
  •   cc959798 · Sep 4, 2018 · 3080 views
    This topic created in 2901 days ago, the information mentioned may be changed or developed.

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

    11 replies    2018-09-05 19:28:51 +08:00
    momocraft
        2
    momocraft  
       Sep 4, 2018
    可以想成 null 是 nan 的非数字版..
    msg7086
        3
    msg7086  
       Sep 4, 2018
    因为 NULL 不是一个「值」,而是「没有值」。「没有值」不满足「值不等于 4 」这个条件。
    Mac
        4
    Mac  
       Sep 4, 2018
    所以 mysql 尽量不要默认值是 NULL
    Chemist
        5
    Chemist  
       Sep 4, 2018 via iPhone
    一开始设计上的问题。如果是状态这种概念要避免出现 null 出现的,每个状态必须有特定含义,而且要有状态转移图啊。如果不能改表将 null 改成默认 0 之类的话,就只能程序上加上处理 null 的情况了。
    CANTI
        6
    CANTI  
       Sep 4, 2018
    sql 本身是三值逻辑的,除了 true、false 之外还有 unknow 来表示未知或者不适用,null 来表示 unknown, 如果包含有 null 值就不能简单的用 true 和 false 这种布尔类型来作为判定条件
    Finest
        7
    Finest  
       Sep 4, 2018
    is null or !=4
    mmdsun
        8
    mmdsun  
       Sep 5, 2018 via Android
    null 是没有值。where a!=4 and a is null
    mmdsun
        9
    mmdsun  
       Sep 5, 2018 via Android
    @mmdsun null 是没有值。where a!=4 or a is null。写错了尴尬
    cc959798
        10
    cc959798  
    OP
       Sep 5, 2018
    @mmdsun 这样会破坏索引呀
    mmdsun
        11
    mmdsun  
       Sep 5, 2018 via Android
    @cc959798 我一般是不用不等于。写成 where (a in(1,2,3) or/and a is not/ null) 这种形式
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5158 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 07:13 · PVG 15:13 · LAX 00:13 · JFK 03:13
    ♥ Do have faith in what you're doing.