Sql 是否可以使用联接而不是嵌套查询重写此内容?
我是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
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。我有点迷路了。这些查询(本质上)是对不在
中的的替换,因此它们回答了您的问题。如果你有一个不同的问题,把它当作一个新问题来问。