场景还原

有一个字段是 已删除 deleted

如果0 则是未删除

如果1 则是已删除

我写的where条件是 deleted != 1

然后数据库里面这个字段的值都是null

我当时就想,null值,也就是不等于1,没毛病,但是就是查不出来,于是我问了一下通义千问,回答如下:

AI回答

理解你的困惑,但实际上在 SQL 中,NULL 的处理方式不同于普通的值。在 SQL 中,NULL 表示“未知”或“不存在”,因此任何与 NULL 的比较都会返回 NULL,而不是 TRUEFALSE。这意味着 NULL != 1 的结果是 NULL,而不是 TRUE

解释

在 SQL 中,以下表达式的结果如下:

  • NULL = 1 结果是 NULL
  • NULL != 1 结果是 NULL
  • NULL IS NULL 结果是 TRUE
  • NULL IS NOT NULL 结果是 FALSE

因此,如果你的查询条件是 deleted != 1,那么 deletedNULL 的记录会被排除在外,因为 NULL != 1 的结果是 NULL,而不是 TRUE

解决方案

为了确保 deletedNULL 的记录也能被查询到,你需要使用 IS NULL 条件来处理 NULL 值。具体来说,可以将 deleted != 1 修改为 deleted != 1 OR deleted IS NULL

修改后的 SQL 查询

SELECT *
FROM menu_data_item
WHERE (deleted != 1 OR deleted IS NULL)
AND id IN (
SELECT system_role_menu.menu_id
FROM system_role_menu
WHERE role_id = 'root'
)

示例

假设你有以下数据:

id title icon path component redirect affix parent_id name hide_in_menu url hide_in_breadcrumb hide_children_in_menu keep_alive target locale deleted
001 首页 DashboardOutlined /dashboard RouteView /dashboard/analysis 0 NULL Dashboard 0 NULL 0 0 0 NULL menu.dashboard NULL
100 系统设置 BarsOutlined /system RouteView /system/user NULL NULL System NULL NULL NULL NULL NULL NULL menu.system NULL
101 用户管理 BarsOutlined /system/user /system/user NULL NULL 100 SystemUserManage NULL NULL NULL NULL 1 NULL menu.system.user NULL
102 菜单管理 BarsOutlined /system/menu /system/menu NULL NULL 100 SystemMenuManage NULL NULL NULL NULL 1 NULL menu.system.menu NULL
020 数据中心 DashboardOutlined /dashboard/analysis /dashboard/analysis NULL 0 001 DashboardAnalysis 0 NULL 0 0 1 NULL menu.dashboard.analysis NULL

运行修改后的查询:

SELECT *
FROM menu_data_item
WHERE (deleted != 1 OR deleted IS NULL)
AND id IN (
SELECT system_role_menu.menu_id
FROM system_role_menu
WHERE role_id = 'root'
)

预期结果:

id title icon path component redirect affix parent_id name hide_in_menu url hide_in_breadcrumb hide_children_in_menu keep_alive target locale deleted
001 首页 DashboardOutlined /dashboard RouteView /dashboard/analysis 0 NULL Dashboard 0 NULL 0 0 0 NULL menu.dashboard NULL
100 系统设置 BarsOutlined /system RouteView /system/user NULL NULL System NULL NULL NULL NULL NULL NULL menu.system NULL
101 用户管理 BarsOutlined /system/user /system/user NULL NULL 100 SystemUserManage NULL NULL NULL NULL 1 NULL menu.system.user NULL
102 菜单管理 BarsOutlined /system/menu /system/menu NULL NULL 100 SystemMenuManage NULL NULL NULL NULL 1 NULL menu.system.menu NULL
020 数据中心 DashboardOutlined /dashboard/analysis /dashboard/analysis NULL 0 001 DashboardAnalysis 0 NULL 0 0 1 NULL menu.dashboard.analysis NULL

总结

通过修改查询条件,确保 deletedNULL 的记录也能被正确查询到。希望这能解决你的问题。

[SQL]null值被比较的结果问题的更多相关文章

  1. SQL NULL 值【摘自W3C】

    SQL NULL 值 本章讲解 IS NULL 和 IS NOT NULL 操作符. NULL 值是遗漏的未知数据.默认地,表的列可以存放 NULL 值. 如果表中的某个列是可选的,那么我们可以在不向 ...

  2. SQL NULL 值

    NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...

  3. SQL-W3School-高级:SQL NULL 值

    ylbtech-SQL-W3School-高级:SQL NULL 值 1.返回顶部 1. NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS N ...

  4. sql null值

    SQL Server 提供 SET CONCAT_NULL_YIELDS_NULL { ON | OFF } 来控制 null 与其它字符串连接的行为. 当 SET CONCAT_NULL_YIELD ...

  5. SQL null值 查询null

    select * from emp;

  6. 22.NULL 值

    NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...

  7. SQL中NULL值

    SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...

  8. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

  9. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  10. mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?

    最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQU ...

随机推荐

  1. USB眼图常识

    最近一段时间,项目需求,需要对USB眼图进行摸底测试.测试过程很简单,然而debug之路却很不简单.不简单往往也就意味着带来了不少收获. 示波器跨接在接收滤波器的输出端,调整示波器扫描周期,使示波器水 ...

  2. MySQL精品学习资源合集 | 含学习教程笔记、运维技巧、图书推荐

    MySQL凭借开源.免费.低门槛.稳定等优势,成为了当前最流行的关系型数据库之一.从1998年发行第一版以来,通过不断地更新迭代,MySQL被越来越多的公司使用,已然成为当下潮流. 为了帮助大家更好地 ...

  3. 一、Tomcat基础知识与运行原理

    本章节为介绍如何安装Tomcat工具以及其主要架构知识概念,深入浅出让新人玩家理解为什么选择该容器以及该容器的优点 web服务器 概念 服务器:安装了服务器软件的计算机 服务器软件:接收用户的请求,处 ...

  4. OpenFunction 应用系列之一: 以 Serverless 的方式实现 Kubernetes 日志告警

    概述 当我们将容器的日志收集到消息服务器之后,我们该如何处理这些日志?部署一个专用的日志处理工作负载可能会耗费多余的成本,而当日志体量骤增.骤降时亦难以评估日志处理工作负载的待机数量.本文提供了一种基 ...

  5. 云原生周刊 | 让 ChatGPT 以电子邮件的方式来解释 KubeSphere

    过去的一周是 ChatGPT 的狂欢,我猜每一位云原生玩家都很好奇他是如何看待 Kubernetes 的.咱们不防换个方式来提问,让它使用电子邮件的方式来向别人推荐 KubeSphere 和 Open ...

  6. cornerstone中RAFT的buffer的实现

    1.概览: 谈到raft协议实现就绕不开网上流行的mit6.824,但其为go语言,官方没有lab的答案,框架也很晦涩难懂,且全网没有一个博客对其有清晰的解释,有的只是甩一堆名词然后直接贴没有任何注释 ...

  7. 推荐一款专为Nginx设计的图形化管理工具: Nginx UI!

    Nginx UI是一款专为Nginx设计的图形化管理工具,旨在简化Nginx的配置与管理过程,提高开发者和系统管理员的工作效率. 项目地址:https://github.com/0xJacky/ngi ...

  8. IPV6改造 华为云如此简单

    现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...

  9. AMCL 原理解读

    AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,,源于MCL算法的一种增强,是机器人在二维移动过程中概率定位系统,采 ...

  10. typescript 编译报错 不能用于索引类型

    Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 't ...