【发布时间】:2017-07-28 02:36:19
【问题描述】:
我有 2 个表:A 有 400000 条记录,B 大约有 350000 条记录。
我正在执行 LEFT JOIN 以显示两个表之间的差异,但查询返回大约 100000。
这是我的 Not-In 查询:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
是否有问题,或者查询返回的结果是否可能超过表之间的差异?谢谢
【问题讨论】:
-
返回结果大于两表记录数之差是很正常的。不仅
B中可能有不在A中的记录,而且A也可能有B没有的记录。如果您认为这是不正确的,您应该仔细查看您的数据。正如所写,您的查询看起来不错。 -
您确定所有来自 B 的记录都存在于 A 中吗?
-
我通常在两个表之间做一个联合来检查两个方向的匹配。
-
@Siyual 我使用 RIGHT JOIN 检查了另一个方向,结果显示 TableB 中没有不在 TableA 中的记录。在我看来,这个 LEFT JOIN 显示的结果比表之间的差异更多。我试图弄清楚是否还有其他原因,但我仍然不完全理解。
-
@warty 这听起来像是一个愚蠢的问题,但是您的 RIGHT JOIN 是什么样的?特别是当你被难住时,如果这是你努力的一部分,那么你也应该展示它(不仅仅是在 cmets 中陈述它)......即使它看起来微不足道。并且不要只是在这里输入,而是重新运行您发布的内容。最后,如果您的 RIGHT JOIN 语句确实如您所说的那样有效,那么 TableB 的 duplicate ID 值都与 TableA.ID 值匹配。从数字 TableB 中至少有 50,000 个重复的 ID 值。如果 ID 是唯一的主键,那就没有意义了。