首页
学习
活动
专区
圈层
工具
发布

这个使用NOT IN的简单查询出了什么问题?

这个使用NOT IN的简单查询出了问题,可能是因为在使用NOT IN进行子查询时,子查询的结果集中包含了NULL值。在SQL查询中,NULL值会导致NOT IN查询的行为出现异常。

例如,假设我们有一个表格A,其中包含两个字段:id和name。我们想要查询表格B中所有不在表格A中的记录,可以使用以下查询语句:

代码语言:txt
复制
SELECT * FROM B WHERE id NOT IN (SELECT id FROM A);

但是,如果表格A中的id字段包含了NULL值,那么这个查询语句将会返回空结果集,因为NULL值不会被包含在NOT IN的条件中。

为了解决这个问题,可以使用LEFT JOIN或者NOT EXISTS来代替NOT IN进行查询。例如,使用LEFT JOIN的查询语句如下:

代码语言:txt
复制
SELECT B.* FROM B LEFT JOIN A ON B.id = A.id WHERE A.id IS NULL;

使用NOT EXISTS的查询语句如下:

代码语言:txt
复制
SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE B.id = A.id);

这两种查询方式可以避免NULL值对查询结果的影响,并且可以正确地返回表格B中不在表格A中的记录。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快速理解为啥这个查询使用索引,那个查询不使用索引,学会了才发现:真tm简单

优化器经过调查得知,需要扫描的二级索引记录占总记录条数的比例是3/16,它觉得这个查询使用二级索引来执行比较靠谱,所以在执行计划中就显示使用这个idx_key1来执行查询: ?...优化器经过调查得知,需要扫描的二级索引记录占总记录条数的比例是13/16,跟显然这个比例已经非常大了,所以优化器决定使用全表扫描的方式来执行查询: ?...这还不简单,让表中符合IS NOT NULL条件的记录少不就行了,我们可以执行一下: UPDATE t SET key1 = NULL WHERE key1 < 80; 这样再去执行这个查询: SELECT...优化器经过调查得知,需要扫描的二级索引记录占总记录条数的比例是3/16,它觉得这个查询使用二级索引来执行比较靠谱,所以在执行计划中就显示使用这个idx_key1来执行查询: ? !...优化器经过调查得知,需要扫描的二级索引记录占总记录条数的比例是2/16,它觉得这个查询使用二级索引来执行比较靠谱,所以在执行计划中就显示使用这个idx_key1来执行查询: ? 且慢!

66110

我们的软件出了什么问题------《敏捷软件开发:原则、模式与实践》(一)

第一篇 软件设计存在的问题 我们知道,系统的设计,是存在于头脑中的衣服至关重要的图像。 即使我们在一开始的设计阶段,就非常清晰的了解了需求,甚至于在发布的时候,依然清楚。...但是在接下来,随着不断的使用,弊端、不足会一一的被暴露出来。系统变得越来越难以维护,最后,即使仅仅进行最简单的更改,也需要花费巨大的努力。...笔者提出了一下观点:当软件出现了下面任何一种气味时,就表明软件正在腐化: 1、僵化性:很难对系统进行改动。因为牵扯到其他太多部分的改动。...4、粘滞性:做正确的事比做错误的事要困难。 两种表现形式:软件的粘滞性和环境的粘滞性 面临一个改动时,开发人员发现,有一些方法会保持设计,但是实施起来困难,另一些方法会破坏设计,但是实施起来相对简单。...而我们希望的是,可以更容易地进行哪些保持设计的变动。 5、不必要的复杂性:设计中包含有不具任何直接好处的基础结构。 6、不必要的重复:设计中包含有重复的结构,而该结构本可以使用单一的抽象进行统一。

84380
  • 这个简单小技巧,可能n倍提升查询编辑效率! | PQ优化

    很多朋友都会遇到一个问题:当处理的数据比较多时,每添加一个查询步骤,都要等很久。...其实,很多时候,我们并不需要在查询编辑的过程中每次看全部数据,所以,解决这个效率问题,很简单,学会一个小技巧即可。...既然数据量很大影响效率,而我们在编辑查询的时候又不需要全部数据,那么,我们完全可以在进行各种数据处理(查询编辑)前,加一个步骤,仅保留少量数据: 比如,仅(按个人喜欢)保留10行: 这样,后面每个步骤的处理...最后查询编辑工作搞完,再把这个“保留行”的步骤删除即可: 当然,这个方法毕竟在处理过程中剔除了大量数据,所以,在进行数据的分组或者跨表合并等操作时,可能会出现一些中间结果不全,或合并数据得到空值的情况...此外,这种处理方式,也可能会隐藏掉一些查询步骤本身数据处理效率就很低的问题,比如,某些步骤使用了大数据量时不应该使用的方法……注意在进行全量数据刷新效率较低时进行检查和优化。

    93720

    【学术】试试这个!研究人员设计出了更好的推荐算法

    本周,在神经信息处理系统会议上,他们报告说, 他们已经使用他们的框架来构建一个新的推荐算法,应该比现在使用的推荐算法更好,特别是当评级数据“稀疏”时——也就是说, 在审查的产品和不同的客户分配的评级之间...该算法的基本策略很简单:当试图预测顾客对某一产品的评价时,不仅要使用相似品味的人的评分,而且要使用与这些人相似的人的评分等等。 这个想法很直观,但在实践中,一切都取决于具体的相似性度量。...或者换句话说,当你从一个朋友的喜好转移到朋友的朋友时,这个过程中引入了什么噪音,是否有一个正确的方法来量化这种噪音,这样我们就能平衡我们所引入的噪音所带来的信号。...“当我们对一部电影进行采样时,我们实际上并不知道它的功能是什么,所以如果我们想准确预测这个功能,我们将无法做到,”Lee说。“但如果我们只是想估算用户功能之间差异,我们则可以计算出这个差异。”...卡内基梅隆大学(Carnegie Mellon University)的亨氏公共政策和信息系统学院的助理教授乔治•陈(George Chen)表示:“他们展示的算法简单、直观、优雅。”

    81850

    为了解决这个 RTT 过长的问题,我祭出了大招!

    正常的 RTT 在几十 ms 左右,所以 3s 这个时延肯定不正常,于是着手排查,由于每个接口都可能超过 3s,所以下文皆以登录接口分析为例,因为登录接口逻辑相对比较简单。 排查思路 1....看下请求是否依然缓慢,这里我两个方法都试了,用 Safari 也重现了 RTT 大于 3s 的情况,并且我用 curl 在终端请求也发现了 RTT 大于 3s 的情况,如何使用 curl 请求呢,这里提醒一下...,以及各个方法的调用时间 这里我们要用到它的最后一项功能,实时查看各个方法的调用时间,整个使用 arthas 的步骤如下 1、 首先我们要先下载一下 arthas,如下 curl -O https://...trace 执行的结果(MVC 服务执行时间 80ms 左右)与前端请求有 1/3 的概率超过 3s 的结论告诉了运维,让他们排查一下从反向代理层到站点层这中间是否有啥问题,不一会儿果然查出了问题。...1/3 的概率打到这台下线机器的 ip 上的,由于这个 ip 对应的机器无法响应这个请求,等到超时后,kongfu 会重试把这个请求打到另外正常的两台机器中的任意一台,也就是说请求 3s 中的大部分时间花在了等待那台不正常的

    1.8K40

    将视频压缩到最小,使用这个方法很简单

    视频文件太大的话在传输的过程中会很浪费时间,遇到这种情况我们可以直接将视频先进行压缩,很多小伙伴可能都不知道压缩的方法,下面给大家讲解一个视频压缩技巧,希望可以帮助到大家!...首图.png   操作步骤:   一.打开工具,选择压缩类型   首先打开安装好的工具,选择压缩类型视频压缩; 1.png   二.添加文件   1.选择好压缩类型后,在跳转的页面中,通过添加文件...,我们需要对视频的相关选项进行设置;如:压缩设置和输出格式等; 3.png   四.保存路径设置   视频相关设置完成之后,在工具下方,可对视频文件的保存路径进行设置,这样可以更加方便的找到压缩后的文件...,可以查看压缩前后的大小   压缩前大小为:1019.90kb   压缩后大小为:797.06kb 6.png   今天的分享到这里就结束了,方法步骤阐述的很详细,相信认真阅读的小伙伴都看命阿碧了吧...,动手试试吧,在绘制的过程中遇到不明白的可以直接在留言框中进行留言哦!

    3.1K50

    在BI软件上使用SQL查询其实很简单

    如何在BI软件上使用SQL查询? 我理解在BI上使用SQL是对原始数据进行查询、筛选、清洗,这一点主流BI工具像power BI,tableau、superset都可以支持。...你只需要写好SQL代码,对数据里的相关表进行查询,就可以对查询后的新表进行分析。 举个例子,在tableau里使用SQL,这里我们以连接MySQL数据库为例。...其他BI工具SQL使用方法也类似,都是基于数据库表的查询,然后做结果数据供BI进行分析、可视化。...以下是superset SQL LAB的核心功能: 几乎可以连接所有数据库 一次可以处理多个查询 使用Superset丰富的可视化功能实现查询结果的流畅可视化 浏览数据库元数据:表、列、索引、分区 支持长时间查询...可以检索过去查询过的东西 还有国内的一些BI,对SQL更是都会支持,使用方法千篇一律。

    33910

    原 pg查询树的简单解读

    log) 表:create  table  aa(a int,b int); 数据:insert into aa values (0,1),(1,0),(1,1); 执行查询语句...nParamExec 0    } STATEMENT:  select * from aa where ((4-3)/a>1 and a>0); 经过查看,对一个查询做的操作如下...(在此以上述的sql语句为例分析,只是针对where后的语句),这是解析时生成的树的结构(重写为对其进行更改): (4 - 3) / a > 1...,其中首先是进行了操作符优先级的解析,gram里解析的): 首先,这里的都是二叉树结构的,以深度优先进行遍历的,其中根节点是and(location:34),两个子节点分别是(a>0) 和...当执行时,首先进行的是39节点的操作(a>0),而后进行的是26节点的操作(4-3),再进行29节点的操作(26,30节点的"/"操作),再进行31节点的操作, 然后在对39,40两个节点进行

    1.3K130

    实验3.1 简单的单表查询

    一、实验目的 熟练掌握用SELECT语句实现简单的单表查询。掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。 二、实验原理 用SELECT语句实现简单的单表查询。...在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。...WHERE子句中用关系比较符、[NOT] BETWEEN、[NOT]  IN、LIKE、 IS [NOT]NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。...ORDER BY子句将根据查询结果集中一个或多个字段对查询结果进行排序。 三、实验设备 安装有SQL SERVER 2000的计算机。...like '刘%' 2.查找所有定单金额高于20000的所有客户编号 select cust_id from sales where tot_amt>20000;  3.查找业务部或会计部的女员工的基本信息

    1.5K20

    一道简单又不简单的sql查询语句

    抛砖引玉 无意间在简书上浏览的时候看到一篇写数据库查询的练习题,其实也好无奈,大数据啊大数据,自从看了几天有关编程和程序员方面的文章,首页推荐的内容都是关于这样的技术贴,太那啥了,想看点小故事小情感类的文章都要自己搜...今天没有小故事,可能会比较枯燥(毕竟数据库嘛) 题目是:查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 先看两个表,然后我梳理了一下知识要点,最后大家就可以解题啦(当然并不一定要用这个解法...,有兴趣可以在下方留言你的查询sql语句) 数据库表 学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别...知识点 CONCAT(str1,str2) 这里用到了mysql的concat函数,concat(str1,str2),连接参数产生的字符串。...[Order BY ASC/DESC 排序字段] [Separator '分隔符']) 例如查询学生表: mysql> select group_concat(Sname) from Student

    64040

    组长指出了我使用react常犯的错误

    背景 年底了,换了项目组,新的项目组使用react,从vue到react,我只花了一天的时间,看了官方简单的文章之后,就觉得这玩意很简单啊,比起vue的那么api来说,这根本没有学习成本好吧,十分迅速的就进入了...react的项目开发,并且洋洋得意,根据我多年的经验来看,这波肯定会得到领导的赏识 很快,我就做完了我的需求,把代码提交上去,组长可能确实比较闲,还review了我的代码,并且指出了一系列的问题,并告诉我说学习...,提交的时候从state上再把数据取到,这一点确实很像vue的双向绑定,通过state的方式实现了,看着表面没有问题,并且页面也呈现了,submit的数据也取到了 但是实际上,我们并没有在别的地方使用这个...name状态,除了在提交的时候,有人会说,value也用到了,但是实际上你是可以不需要value这个字段的,只有提交的时候才会用到这个数据,所以这里完全可以不使用state,防止组件刷新 只需要通过ref...,但实际上useEffect中的回调会执行多次,因为person是个引用类型,每次的指针地址都是变化的 这个时候你可以使用useMemo来解决这个问题 const person = useMemo(()

    1.1K30

    通过这个简单技巧节省宝贵的GenAI Token

    假设你有一个包含 20 列和 500 万行的 CSV 文件。它可能包括交易记录以及客户数据。你想问一个问题,例如这个客户在某一天购买了什么。你这个月赚了多少钱?这对 LLM 来说是简单的工作吗?...然后,不要要求 GenAI 回答你的问题,而是要求 GenAI 生成必要的代码或查询来回答这些问题。 然后,你在本地环境中执行代码。 “你不会违反上下文窗口大小。你不会牺牲数据的隐私,”他说。...使用 Jupyter Notebook 或 LM Studio,您甚至可以自动执行查询,结果会在返回后立即显示在工作区中。 “好处是您不必上传数据,也不必学习数据分析,”他说。...Wei-Meng Lee 的演讲主要关注如何使用 Hugging Face,这是一个协作平台,供开发人员和研究人员使用机器学习模型、数据集和应用程序并进行协作。...Hugging Face 的 pipeline 对象 可以简化使用这些模型的任务,然后他继续演示。他还展示了如何使用 Gradio library 轻松运行基于 LLM 的 Python 应用程序。

    7000

    基础SQL-DQL语句-SELECT查询的简单使用以及IFNULL函数

    基础SQL-DQL语句-SELECT查询的简单使用以及IFNULL函数 分类 描述 关键字 DQL(Data Query Language)数据查询语言 (掌握) DQL语言并不是属于MYSQL官方的分类...,但是对数据库的操作最多就是查询,所以我们的程序员把查询语句的语句称作为DQL语言 SELECT 等 查询不会对数据库中的数据进行修改.只是一种显示数据的方式 1....简单查询 备用数据: ----------------运行下面的sql语句,生成相关的数据库表 # 创建商品表: CREATE TABLE product( pid INT, pname VARCHAR...select 字段名1 as 别名,字段名2 别名 from 表名 as 表别名; as关键字可以省去不写 -- 需求3.别名查询.使用的关键字是as(as可以省略的). -- 3.1表别名:查询商品名称和价格...如果想要计算,此时就需要使用 IFNULL 函数,判断当查询的值为 NULL,可以设置为 0 ,操作如下: select 列名1 + 固定值 from 表名; -- 需求:将所有商品的价格+10元进行显示

    1.6K10

    出了Linux 故障找不到方法?看大牛简单、朴实的解决思路

    ——查阅日志文件:有时候报错信息只是给出了问题的表面现象,要想更深入的了解问题,必须查看相应的日志文件,而日志文件又分为系统日志文件(/var/log)和应用的日志文件,结合这两个日志文件,一般就能定位问题所在...——分析、定位问题:这个过程是比较复杂的,根据报错信息,结合日志文件,同时还要考虑其它相关情况,最终找到引起问题的原因。 ——解决问题:找到了问题出现的原因,解决问题就是很简单的事情了。...这个策略本身没有什么问题,但是通过检查发现这台服务器的系统分区中并没有单独划分/tmp分区,这样/tmp下的数据其实占用根分区的空间,既然找到了问题,那么删除/tmp目录下一些占用空间较大的数据文件即可...,导致虽然删除了access_Ilog文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放。...,但是为什么提示这样的错误呢 解决思路,这个案例涉及ulimit命令的使用 在使用ulimit时,有以下几种使用方法: 1、 在用户环境变量中加入 如果用户使用的是bash,那么可以在用户目录的环境变量文件

    2.5K81

    增删改查的查之简单查询

    导读 软件测试人员在工作使用SQL语言中的查询是使用得最多的,而查询也是SQL语言中最复杂的,很多测试人员只使用到其中最简单的查询 1.数据库的使用 现在在任何项目中都有数据的存在,那么在测试过程中查看数据库中的数据是必不可少的步骤...软件测试人员在执行测试时使用最多的语句就是查询(SELECT)语句,而SELECT语句也是SQL语言中相当复杂的语句,它包含单表查询,连接查询,嵌套查询,集合查询等各种复杂不同的数据库查询。...2.单表查询 单表查询是SELECT语句中最简单的查询语句。 select语句格式: SELECT [ALL|DISTINCT] {*|table1....name),班级(class),年龄(age)) 课程(course)表(课程名(c_name),课程号(cno)) 分数(score)表(学号(xuehao),课程号scno,分数(score)) 1.最简单的查询子句...FROM class -> WHERE name LIKE '王%'; 注意:LIKE----好像 一般与通配符搭配使用: %---一个或多个字符串 _---一个字符 9.查询出class表中姓名为王开头

    2.1K30
    领券