not in 和 not exists 运行结果是否一样
时间: 2023-11-27 22:53:21 浏览: 40
不完全一样。
`NOT IN` 是用于在 WHERE 子句中排除一组值的运算符。它与 IN 运算符相反,IN 运算符用于指定一组值并从中选择匹配的行。
例如,以下 SQL 查询将返回客户名字不是 'John' 或 'Jane' 的客户信息:
```
SELECT * FROM customers
WHERE customer_name NOT IN ('John', 'Jane');
```
而 `NOT EXISTS` 是用于检查是否存在不满足子查询条件的行,如果没有,则返回 TRUE。如果子查询返回任何行,则返回 FALSE。
例如,以下 SQL 查询将返回没有订单的客户信息:
```
SELECT * FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id
);
```
因此,虽然这两个运算符的作用有些相似,但它们的具体用法和运算结果是不同的。
相关问题
exists in driver looking up volume plugin nvidia-docker not found
这个错误通常是由于nvidia-docker插件未正确安装或未正确配置所导致的。你可以按照以下步骤来解决这个问题:
1. 确认你已经正确安装了nvidia-docker插件。你可以在终端中运行以下命令来检查是否已正确安装:
```
docker volume ls -q -f driver=nvidia-docker
```
如果你没有看到任何输出,那么nvidia-docker插件可能没有正确安装。你可以按照nvidia-docker的官方文档来重新安装它。
2. 确认你已经正确配置了nvidia-docker插件。你可以在终端中运行以下命令来检查是否已正确配置:
```
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
```
如果你看到了nvidia-smi的输出,那么nvidia-docker插件已经正确配置。如果你没有看到任何输出,那么你需要按照nvidia-docker的官方文档来进行配置。
如果你已经确认nvidia-docker插件已经正确安装和配置,但仍然无法解决这个问题,那么你可以到nvidia-docker的GitHub页面上报告这个问题,寻求更多的帮助。
如何对spark sql 中的not in 进行优化
1. 使用NOT EXISTS代替NOT IN
在Spark SQL中,使用NOT EXISTS比NOT IN更有效。这是因为NOT EXISTS只需要找到一个匹配项就可以停止运行了,而NOT IN需要扫描整个列表。因此,使用NOT EXISTS可以提高查询性能。
例如,下面的查询使用NOT IN:
```
SELECT *
FROM table1
WHERE column1 NOT IN (SELECT column1 FROM table2)
```
可以优化为使用NOT EXISTS:
```
SELECT *
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.column1 = t2.column1)
```
2. 使用INNER JOIN代替NOT IN
在某些情况下,使用INNER JOIN可以代替NOT IN。例如,下面的查询使用NOT IN:
```
SELECT *
FROM table1
WHERE column1 NOT IN (SELECT column1 FROM table2)
```
可以优化为使用INNER JOIN:
```
SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2
ON t1.column1 = t2.column1
WHERE t2.column1 IS NULL
```
这种方法可以避免使用子查询,从而提高查询性能。
3. 使用EXISTS代替IN
在Spark SQL中,使用EXISTS比IN更有效。这是因为EXISTS只需要找到一个匹配项就可以停止运行了,而IN需要扫描整个列表。因此,使用EXISTS可以提高查询性能。
例如,下面的查询使用IN:
```
SELECT *
FROM table1
WHERE column1 IN (SELECT column1 FROM table2)
```
可以优化为使用EXISTS:
```
SELECT *
FROM table1 t1
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t1.column1 = t2.column1)
```
这种方法可以避免使用子查询,从而提高查询性能。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)