首页 > 解决方案 > 这可以用 JOIN 而不是嵌套查询重写吗?

问题描述

我是 sql 的新手,而且我通常最好避免子查询,所以我想知道如何用连接重写它......

SELECT ccn.*
FROM table1 AS  ccn 
WHERE ccn.col1 = '11'
AND ccn.col2  not in (SELECT table2.col4
                      FROM  table2)

问候

标签: sql

解决方案


我建议使用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;

推荐阅读