前言 工作中要删除 运营表示username="张三"的数据有5条,某张表中username<>"张三"的数据,username的默认值为null,但是笔者在进行查询时username="张三"比username=<>张三少了100多条数据,故发现sql存在三值逻辑。
在 SQL 中,比较 NULL 值时需要特别注意,因为 NULL 与任何值(包括它自身)的比较结果都是未知(UNKNOWN),而不是 true 或 false。这是 SQL 中的三值逻辑的特性之一。
因此,如果你执行 username <> ‘张三’ 这样的比较,对于那些用户名为 NULL 的记录,比较结果将是未知。根据 SQL 的三值逻辑,未知的结果将被视为不满足条件(即不为 true),因此这些记录会被过滤掉。
为了包括 NULL 值的记录,你可以使用 IS NULL 或 IS NOT NULL 条件来显式地处理 NULL 值
- 最后解决办法(username default null)
(username!="张三" or username is null)