SQL(MS-Access) - LEFT JOIN显示左表中的记录不在右表中

时间:2017-07-27 18:25:47

标签: sql ms-access

我有2个表:A有400000条记录,B大约有350000条记录。

我正在进行LEFT JOIN以显示两个表之间的差异,但查询返回约100000。

这是我的非写入查询:

SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)

是否有错误或者查询返回的可能性多于表之间的差异?感谢

2 个答案:

答案 0 :(得分:1)

您查询显示表A中表B中没有匹配项的行。如果您需要差异,还需要表B中表A中不存在的行。您可以使用union

SELECT *
   FROM TableA 
   LEFT JOIN TableB ON TableA.[ID] = TableB.[ID]
   WHERE (TableB.[ID] is null)
Union All
SELECT *
   FROM TableB 
   LEFT JOIN TableA ON TableB.[ID] = TableA.[ID]
   WHERE (TableA.[ID] is null)

编辑:这假设类似的表结构。您可能需要在select子句中使用列名而不是*。

答案 1 :(得分:-2)

除了区别之外,您可能会从TableB中提取一些ID,其中ID实际为null,因为相等不适用于空值。

所以正如另一个答案所述,正确的方法是将NULL条件设置为ON子句的一部分,而不是WHERE