我有2个表:A有400000条记录,B有350000条记录。SQL(MS-Access) - 左加入显示左表中的记录不在右表
我正在做一个左加入显示两个表之间的差异,但查询返回约100000。
这是我的不是,在查询:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
有什么问题或是否有可能该查询返回比表之间的区别吗?谢谢
我有2个表:A有400000条记录,B有350000条记录。SQL(MS-Access) - 左加入显示左表中的记录不在右表
我正在做一个左加入显示两个表之间的差异,但查询返回约100000。
这是我的不是,在查询:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
有什么问题或是否有可能该查询返回比表之间的区别吗?谢谢
除了区别之外,您可能会从TableB中拉出一些行,其中ID真的为空,因为相等性不适用于空值。
所以正确的方法,如对方回答说,是设置NULL条件为ON子句的一部分,而不是WHERE
'Null'条件*意图*在'Where'子句中,因为它们只想选择'外部连接'检查失败的记录。将它移到'On'子句中*不是解决方案(并且会导致零结果,因为'A.Id = B.Id和B.Id是Null'永远不会导致真实。) – Siyual
访问还限制了什么字段和条件可以出现在join ON子句中 - 它会返回一个错误。 –
@Siyual:NULL在=时产生不一致的结果,这就是为什么含义不明确 –
您的查询显示,从表格中的行没有在表中的比赛B.如果你想的差异,还需要从表B行不表A中存在,您可以用工会
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子句中使用列名而不是*。
这是非常正常的,因为返回的结果比两个表之间的记录计数差异大。不仅在'B'中有不在'A'中的记录,而且'A'也可能有'B'没有的记录。如果您认为这是不正确的,您应该仔细查看您的数据。正如所写的,你的查询看起来很好。 – Siyual
你确定你所有的记录都来自B吗? –
我通常在两个表格之间进行联合检查两个方向上的匹配。 –