cc959798
V2EX  ›  问与答

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

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