SQL面试题——in和not in 不支持怎么办
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);
我们分析一下,这里有两种情况,其实那种都是不可取的
- 查询a 表的每一条记录,b 表都得进行一次查询
- 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