sql - 这可以用 JOIN 而不是嵌套查询重写吗?
问题描述
我是 sql 的新手,而且我通常最好避免子查询,所以我想知道如何用连接重写它......
SELECT ccn.*
FROM table1 AS ccn
WHERE ccn.col1 = '11'
AND ccn.col2 not in (SELECT table2.col4
FROM table2)
问候
解决方案
我建议使用NOT EXISTS
:
SELECT ccn.*
FROM table1 ccn
WHERE ccn.col1 = '11' AND
NOT EXISTS (SELECT 1
FROM table2 t2
WHERE t2.col4 = ccn.col2
);
这通常具有最佳性能——并且可能会NULL
按照您希望的方式处理值。
带过滤的ALEFT JOIN
在性能上非常相似:
SELECT ccn.*
FROM table1 ccn LEFT JOIN
table2 t2
ON t2.col4 = ccn.col2
WHERE ccn.col1 = '11' AND t2.col4 IS NULL;
推荐阅读
- c - 试图在c中将十六进制格式化为小端
- r - 在 R 上使用 extract() 提取区号
- c++ - 在 C++ 中删除字符串开头的空字符的最简单方法是什么?
- pandas - 创建一个字段,汇总在某行之前出现条目的所有时间
- pytest - 已修补模块时正确修补 pytest 中的方法
- swift - 用另一个泛型扩展一个泛型类型
- r - 在ggplot条形图中显示离散变量的所有x轴标签
- c# - 无法使用 TLS 证书对 IBM MQ C# 进行身份验证
- python - 如何使用 .isin 进行子集化(似乎无法正常工作)?
- javascript - 如何修复运行“找不到模块”错误的 docker 容器?