MS Access/SQL加入大型数据集

问题描述:

我想运行一个检查,看看如果表A中的4列与表B中的4相同,那么测试第5列中的值是否相同。 (对于20,000-40,000)记录在每个表中。MS Access/SQL加入大型数据集

我已经尝试在访问中这样做,但它似乎挂起,我可以理解为什么考虑数据集是相当大的。

我已经尝试加入问题的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分钟的“没有响应”

+1

使用'和'而不是条件之间的逗号在'INNER JOIN'的'ON '子句:'TableA.ColA = TableB.ColA AND TableA.ColB = TableB.ColB'而不是'TableA.ColA = TableB.ColA,TableA.ColB = TableB.ColB'如果使用Design View Access查询设计器设置您的连接,它应该为您提供'ON'子句的正确语法。 – HansUp

+1

在连接字段中添加索引。 – HansUp

+1

使用这些数据表的较小副本进行初始查询测试......几十行而不是20,000到40,000行。 – HansUp

我不怎么表现会比你尝试,但在类似的情况下,我使用联合查询设置数据,第二个查询基于UNION汇总数据,第三个查询获取差异。一个额外的功能,以及我这样做的原因是,它会在任一表中找到与其他表不匹配的记录 - 我通常需要知道这些记录。注 - 我使用0假设ColE是数字,并且如果数据是文本,则可能需要调整查询。

UNION:

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)) 
+0

谢谢唐乔治。 – calh27