MS Access / SQL 连接大型数据集



我正在尝试运行检查以查看表 A 中的 4 列是否与表 B 中的 4 列相同,然后测试两者中第 5 列中的值是否相同。(对于 20,000-40,000) 每个表中的记录。

我尝试在访问中执行此操作,但它似乎挂起了,我可以理解为什么考虑到数据集非常大。

我尝试在有问题的 4 列上连接,并尝试连接每列中的 4 列并比较连接。问题是它既挂起又不返回结果。

任何人都可以就解决这个问题的正确/更好的方法提供建议吗?

我唯一能想到的是先对数据进行排序,但这可能会很慢,我不知道 Select 查询是否提前退出。提前谢谢你。

太慢 1

SELECT TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.CoLE FROM TableA INNER JOIN Table B ON(TableA.ColA = TableB.ColA, TableA.ColB =TableB.ColB, TableA.ColC = TableB.ColC, TableA.ColD = TableB.ColD)

太慢 2 SELECT DISTINCT TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD AS C1, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD AS C2, TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.ColE FROM TableA, Table B WHERE TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD = TableB.ColA & TableB.ColB & TableB.ColC & TableB.ColD

编辑:有没有更好的方法来做这种检查?编辑:运行速度太慢2,但"没有响应"花了12.5分钟

我不知道性能与您尝试过的性能相比如何,但在类似的情况下,我使用 UNION 查询来设置数据,第二个基于 UNION 的查询来汇总数据,第三个查询来获取方差。 另一个功能,也是我这样做的原因,是它在任何一个表中查找与另一个表不匹配的记录 - 我通常需要知道。 注意 - 假设 ColE 是数字,我使用 0,如果您的数据是文本,您可能需要调整查询。

联盟:

 Select ColA, ColB, ColC, ColD, ColE as SourceA, 0 as SourceB from TableA
    Union All Select ColA, ColB, ColC, ColD, 0, ColE from TableB

总结:

Select ColA, ColB, ColC, ColD, sum(SourceA) as SourceA, sum(SourceB) as SourceB from UNION

比较:

Select ColA, ColB, ColC, ColD, SourceA, SourceB from SUMMARY where ((SourceA <> SourceB) or (SourceA is null) or (SourceB is null))

最新更新