1

传统的左连接返回左表中的所有记录,包括匹配的记录:

在此处输入图像描述

我想使用连接排除匹配的记录,只返回左表中不匹配的记录:

在此处输入图像描述

如下所示,是我到目前为止提出的代码。
它使用一个WHERE子句来清除匹配的记录——但这在某种程度上感觉是错误的。
这是最好的方法吗?或者有没有更好的独占加盟方式?

SELECT L.col1 ,
       L.col2 ,
FROM leftTable L
LEFT JOIN rightTable R ON R.col1 = L.col1
WHERE R.id IS NULL ;
4

3 回答 3

6

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);

也就是说,逻辑在一个地方(NOT EXISTS表达式),而不是分布在两个查询子句上。

于 2019-10-14T15:56:56.667 回答
1

用来Except解释

   Select * from table t LEFT JOIN 
     TABLE1 t1
   On t.id=t1.id
   Except
 SELECT * FROM TABLE1
于 2019-10-14T15:57:40.373 回答
1

使用左连接方法并没有错,事实上它是标准方法,大多数人在某些情况下遵循这种方法来排除记录和增量插入

于 2019-10-14T17:23:22.623 回答