指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

关于mysql下null的一个小细节

  • 有如下部分sql语句:
    ero.statusId IS NULL OR ero.statusId != 0
    
  • 问题
    如果  ero.statusId != 0 为什么不能判断 null
    
  • 分析: 这是 SQL 中关于 NULL 的一个重要特性:

NULL 比较的特殊性:

在 SQL 中,NULL 不等于任何值,包括它自己, 因为 NULL 不是一个「值」,而是「没有值」。所以:

  • NULL != 0 的结果是 UNKNOWN(未知),不是 TRUE
  • NULL = 0 的结果也是 UNKNOWN,不是 FALSE

因此,当 ero.statusId 为 NULL 时:

  • ero.statusId != 0 不会匹配这条记录(因为结果是 UNKNOWN)
  • 这样没有订单的 ticket 就被过滤掉了

解决办法:

必须显式检查 NULL:ero.statusId IS NULL OR ero.statusId != 0

  • ero.statusId IS NULL → 匹配没有订单的 ticket ✓
  • ero.statusId != 0 → 匹配有订单但状态不是0的记录 ✓

这样两种情况都被覆盖了。

简单来说:SQL 中比较 NULL 时,不能用 = 或 !=,必须用 IS NULL 或 IS NOT NULL。