MS-Access 查询返回重复结果如何防止这种情况



我在查询时遇到了 2 个问题。 首先是浏览 58000 条记录的速度非常慢。 第二个是我在结果中收到重复的帐户ID。

对于重复字段,我相信我缺少一个标准,但还没有弄清楚是哪一个。

如何更改查询以解决这两个问题?

输入:

Account startdate   enddate     AccountID
00001   5/1/2015    5/1/2017    63854
00001   5/1/2017    5/1/2020    73104
00002   4/1/2012    4/1/2014    23764
00002   4/1/2014    4/1/2017    54492
00003   12/1/2012   5/1/2014    43104
00003   5/1/2014    5/1/2015    59321
00003   5/1/2014    5/1/2015    59421
00004   10/1/2012   10/1/2014   42844
00004   10/1/2014   2/1/2017    55481
00004   10/1/2014   2/1/2017    55481
00006   10/1/2014   2/1/2017    55401
00006   10/1/2018   2/1/2019    55402

法典:

SELECT dups.account, 
   dups.startdate, 
   dups.enddate, 
   dups.accountid 
INTO   [renewal tags] 
FROM   dups, 
   dups AS Dups_1 
WHERE  ( ( ( dups.account ) = [dups_1].[account] ) 
     AND ( ( dups.startdate ) = [dups_1].[enddate] ) 
     AND ( ( dups.accountid ) <> [dups_1].[accountid] ) ) 
    OR ( ( ( dups.account ) = [dups_1].[account] ) 
         AND ( ( dups.enddate ) = [dups_1].[startdate] ) 
         AND ( ( dups.accountid ) <> [dups_1].[accountid] ) ); 

输出:

Account startdate   enddate AccountID
00001   5/1/2015    5/1/2017    63854
00001   5/1/2017    5/1/2020    73104
00002   4/1/2012    4/1/2014    23764
00002   4/1/2014    4/1/2017    54492
00003   12/1/2012   5/1/2014    43104
00003   5/1/2014    5/1/2015    59321
00003   5/1/2014    5/1/2015    59421
00004   10/1/2012   10/1/2014   42844
00004   10/1/2014   2/1/2017    55481
00004   10/1/2014   2/1/2017    55481

期望输出:

Account startdate   enddate     AccountID
00001   5/1/2015    5/1/2017    63854
00001   5/1/2017    5/1/2020    73104
00002   4/1/2012    4/1/2014    23764
00002   4/1/2014    4/1/2017    54492
00003   12/1/2012   5/1/2014    43104
00003   5/1/2014    5/1/2015    59321
00003   5/1/2014    5/1/2015    59421
00004   10/1/2012   10/1/2014   42844
00004   10/1/2014   2/1/2017    55481

我应该使用内部联接,并确保表中的帐户 ID 在联接条件中与自身不匹配。 这解决了这两个问题。 更正后的代码如下。

SELECT dups.accountid, 
   dups.accountnumber, 
   dups.startdate, 
   dups.enddate 
INTO   [renewal tags] 
FROM   dups 
   INNER JOIN dups AS Dups_1 
           ON dups.accountnumber = Dups_1.accountnumber 
              AND dups.accountid <> dups_1.accountid 
WHERE  (( ( dups.startdate ) = [dups_1].[enddate] )) 
    OR (( ( dups.enddate ) = [dups_1].[startdate] )); 

相关内容

最新更新