Gif*_*guy 0 sql sql-server join left-join sql-server-2017
传统的左联接返回左表中的所有记录,包括匹配的记录:
我想使用联接排除匹配的记录,并仅从左侧表返回不匹配的记录:
下面显示的是到目前为止我想到的代码。
它使用一个WHERE子句来淘汰匹配的记录-但这有点不对劲。
这是最好的方法吗?还是有更好的排他加入方法?
SELECT L.col1 ,
L.col2 ,
FROM leftTable L
LEFT JOIN rightTable R ON R.col1 = L.col1
WHERE R.id IS NULL ;
Run Code Online (Sandbox Code Playgroud)
该LEFT JOIN方法很好。它已在许多数据库中进行了优化。我个人更喜欢NOT EXISTS,因为我认为它更简洁:
SELECT L.col1, L.col2
FROM leftTable L
WHERE NOT EXISTS (SELECT 1 FROM rightTable R WHERE R.col1 = L.col1);
Run Code Online (Sandbox Code Playgroud)
也就是说,逻辑位于一个位置(NOT EXISTS表达式),而不是分布在两个查询子句中。