Sql 是否可以使用联接而不是嵌套查询重写此内容?

Sql 是否可以使用联接而不是嵌套查询重写此内容?,sql,Sql,我是sql新手,我认为一般来说避免子查询更好,所以我想知道如何用连接重写它 SELECT ccn.* FROM table1 AS ccn WHERE ccn.col1 = '11' AND ccn.col2 not in (SELECT table2.col4 FROM table2) 关于我建议使用不存在编写此文件: SELECT ccn.* FROM table1 ccn WHERE ccn.col1 = '11' AND

我是sql新手,我认为一般来说避免子查询更好,所以我想知道如何用连接重写它

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

关于我建议使用
不存在
编写此文件:

SELECT ccn.*
FROM table1 ccn 
WHERE ccn.col1 = '11' AND
      NOT EXISTS (SELECT 1
                  FROM table2 t2
                  WHERE t2.col4 = ccn.col2
                 );
这通常具有最好的性能——并且可能会按照您希望的方式处理
NULL

带有过滤的
左连接
在性能上非常相似:

SELECT ccn.*
FROM table1 ccn LEFT JOIN
     table2 t2
     ON t2.col4 = ccn.col2
WHERE ccn.col1 = '11' AND t2.col4 IS NULL;

我建议使用
不存在
编写此文件:

SELECT ccn.*
FROM table1 ccn 
WHERE ccn.col1 = '11' AND
      NOT EXISTS (SELECT 1
                  FROM table2 t2
                  WHERE t2.col4 = ccn.col2
                 );
这通常具有最好的性能——并且可能会按照您希望的方式处理
NULL

带有过滤的
左连接
在性能上非常相似:

SELECT ccn.*
FROM table1 ccn LEFT JOIN
     table2 t2
     ON t2.col4 = ccn.col2
WHERE ccn.col1 = '11' AND t2.col4 IS NULL;

谢谢…但似乎没有任何方法有效…包括我的:谢谢…但似乎没有任何方法有效…包括我的:ccn表。col2=(1,2,3,4,5,6)t2表。col4=(3,4,5,6)我希望从ccn恢复col2=1和2的行,但我获得0行…这里缺少一些概念…@oso_togari。我有点迷路了。这些查询(本质上)是对不在
中的
的替换,因此它们回答了您的问题。如果您有不同的问题,请将其作为一个新问题提问。谢谢…但似乎没有任何方法有效…包括我的:谢谢…但似乎没有任何方法有效…包括我的:ccn table.col2=(1,2,3,4,5,6)t2 table.col4=(3,4,5,6)我希望从ccn恢复col2=1和2的行,但我获得0行…这里缺少一些概念…?@oso_togari。我有点迷路了。这些查询(本质上)是对不在
中的
的替换,因此它们回答了您的问题。如果你有一个不同的问题,把它当作一个新问题来问。