0

我正在使用以下 SQL 查询来比较两个 Excel 工作表(两者的设置差异)

strSql = "SELECT [CD_CLIENTE], [NM_CLIENTE], [CPF/CNPJ], [DS_DOCUMENTO], [DTVALIDADE] FROM [BaseAnterior$] " & _
         "WHERE NOT EXISTS  ( " & _
            "SELECT * FROM [BaseAtual$] WHERE" & _
                "[BaseAtual$].[CD_CLIENTE] = [BaseAnterior$].[CD_CLIENTE] AND " & _
                "[BaseAtual$].[NM_CLIENTE] = [BaseAnterior$].[NM_CLIENTE] AND " & _
                "[BaseAtual$].[DS_DOCUMENTO] = [BaseAnterior$].[DS_DOCUMENTO] AND " & _
                "[BaseAtual$].[CPF/CNPJ] = [BaseAnterior$].[CPF/CNPJ] AND " & _
                "[BaseAtual$].[DTVALIDADE] = [BaseAnterior$].[DTVALIDADE]" & _
            ")"

该语句工作正常,问题是它非常缓慢。工作表有 aprox。100k 条记录(不要问我为什么它们不在一个严肃的数据库中)并且执行可能需要几分钟。我知道问题出在我的 SQL 语句上,所以我的问题是:有没有更快的方法来选择 SQL 中的集合差异?

4

2 回答 2

1

首先尝试按所有列排序两张表,然后尝试以下操作:

strSql = "SELECT " &_
      "[B1].[CD_CLIENTE], [B1].[NM_CLIENTE], [B1].[CPF/CNPJ], [B1].[DS_DOCUMENTO], [B1].[DTVALIDADE], " &_
      "[B2].[CD_CLIENTE], [B2].[NM_CLIENTE], [B2].[CPF/CNPJ], [B2].[DS_DOCUMENTO], [B2].[DTVALIDADE] " &_
    [FROM BaseAnterior$] [B1] " & _
         "FULL JOIN [BaseAtual$] [B2] " & _
                "ON [B2].[CD_CLIENTE] = [B1].[CD_CLIENTE] AND " & _
                "[B2].[NM_CLIENTE] = [B1].[NM_CLIENTE] AND " & _
                "[B2].[DS_DOCUMENTO] = [B1].[DS_DOCUMENTO] AND " & _
                "[B2].[CPF/CNPJ] = [B1].[CPF/CNPJ] AND " & _
                "[B2].[DTVALIDADE] = [B1].[DTVALIDADE]"
于 2013-01-08T13:24:05.453 回答
0

最快的方法可能是根本不使用 SQL。请执行下列操作:

  1. 按列列表对两张表上的记录进行排序
  2. 向下列表并比较记录与记录

Excel 在排序记录方面做得很好。比较应该非常快。

在原始公式中,必须将一张纸中的每条记录与另一张纸中的所有(也许是一半)记录进行比较。这需要很长时间。

于 2013-01-08T14:14:37.833 回答