SQL面试题——in和not in 不支持怎么办

server/2024/12/3 8:13:10/

in和not in 不支持怎么办

这是来自读者群的一位同学的问题,说是别人问他in和not in 不支持怎么办,现在我们来看一下这个问题

in 不支持

其实很多朋友都能写出这样的SQL,其实这个SQL 在没有底层优化的时候还是很可怕的

SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key FROM b);

我们分析一下,这里有两种情况,其实那种都是不可取的

  1. 查询a 表的每一条记录,b 表都得进行一次查询
  2. b 表的所有记录都得一次性扫描出来,存在内存中

其实这也就是为什么早期一些查询引擎不支持的原因,其实这个问题很好解决,我们替换成join 就可以了

SELECT a.key, a.value
FROM a 
LEFT  JOIN b 
ON a.key = b.key
WHERE b.key is not  NULL;

其实这个我们可以更简单点

SELECT a.key, a.value
FROM a 
inner  JOIN b 
ON a.key = b.key

not


http://www.ppmy.cn/server/146963.html

相关文章

【Python】ASCII-generator 将图像、文本或视频转换为 ASCII 艺术 生成字符图(测试代码)

目录 预览效果安装环境报错分析基本例程总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 预览效果 原图 黑白图 彩色图 安装环境 拉取代码 https://github.com/vietnh1009/ASCII-generatorpython3.8 pip install…

ElasticSearch学习笔记七:ES查询(二)

一、前言 在前面的文章我们学习了ES的一些基本查询,同时用Java全部实现了一遍,今天我们继续深入学习一下ES的查询。 二、Term级别查询 在 Elasticsearch 中,Term 级别查询用于精确匹配字段值。与全文搜索不同,Term 级别查询不会…

Xcode——LLDB Debugger 与断点调试学习

Xcode——LLDB Debugger 与断点调试学习 文章目录 Xcode——LLDB Debugger 与断点调试学习前言介绍打开LLDB命令helpprintexpression 断点调试异常断点——Exception Breakpoint标志断点——Symbolic Breakpointwatchpointset 断点行为condition条件判断 最后参考文章 前言 在…

linux查询进程的启动时间

说到查询进程的启动时间,你的第一反应肯定是ps -p $pid -o lstart,但是ps 命令通常会通过访问 proc 文件系统来收集进程的信息,它本身是一个外部命令,执行时需要进行进程管理、格式化输出等额外的操作,这会消耗更多的 …

Jmeter 接口测试常见场景

csv 中读取账号密码登录 压测登录接口,通常需要循环读取账号密码,使用 jmeter 处理该需求一般会采用 csv 文件设置来读取账号密码,信息文件(user_info.txt)示例如下: 信息文件中使用英文逗号分割账号、密码…

【LC】35. 搜索插入位置

题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target …

Flink常见面试题

1、Flink 的四大特征(基石) 2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法) 预定义Source 基于本地集合的source(Collection-based-source) 基于文件的source(…

【Leetcode 每日一题】LCR 190. 加密运算

LCR 190. 加密运算 计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量: 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况下实…