我有2个表:A有400000条记录,B大约有350000条记录。
我正在进行LEFT JOIN以显示两个表之间的差异,但查询返回约100000。
这是我的非写入查询:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
是否有错误或者查询返回的可能性多于表之间的差异?感谢
答案 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