【问题标题】:Remove Duplicate Data Based on Three Fields and Two tables基于三个字段和两个表删除重复数据
【发布时间】:2017-07-19 21:04:49
【问题描述】:

我有两个表,每个表都包含三个以上的字段。两个文件上都有一组记录,下面是一个模拟示例:

表 1:

ID Name Town State 1 Dave Chicago IL 2 Mark Tea MD

表 2:

ID Name State Job Married 1 Dave IL Manager Yes 2 Mark MD Driver No

出于我的目的,如果 ID、Name 和 State 相同,则存在重复项。所以上面的数据是重复的。如何从一张表中删除它们(我有超过 900 个重复项,因此无法一一删除)?

【问题讨论】:

  • ID不是两个表的主键吗?为什么你需要打扰名称和状态?或者,可能反过来:ID 与 Name 和 State 有什么关系?
  • ID 不是两个表中的主键。 ID、名称和状态一起定义了唯一性。如上所述,这些是模拟示例,实际数据包括 SSN、生效日期和 Code1 等字段。使用此数据的系统允许 SSN、生效日期和代码的任意组合,这将创建除所有三个一起之外的重复项。

标签: sql ms-access ms-access-2013


【解决方案1】:
delete table1
where ID in(select distinct ID from table1  where ID in (Select ID from table2))

我不明白哪个表有重复,如果你想从一个 table1 中删除重复数据,那么你可以使用这个查询

【讨论】:

    【解决方案2】:

    这个查询将产生一个去重的结果集:

    SELECT Table1.ID,
        Table1.NAME,
        Table1.Town,
        Table1.STATE,
        NULL AS Job,
        NULL AS Married
    FROM Table1
    WHERE Table1.ID NOT IN (
            SELECT Table1.ID
            FROM Table1
            INNER JOIN Table2 ON (Table2.STATE = Table1.STATE)
            AND (Table2.NAME = Table1.NAME)
            AND (Table1.ID = Table2.ID)
            )
    
    UNION
    
    SELECT Table2.ID,
        Table2.NAME,
        NULL AS Town,
        Table2.STATE,
        Table2.Job,
        Table2.Married
    FROM Table2
    

    【讨论】:

      【解决方案3】:

      这是最直接的方法,假设您要从 Table1 中删除。我对 Access SQL 语法有点生疏,但我相信这可行:

      DELETE FROM [Table1]
      WHERE EXISTS (
          SELECT 1
          FROM [Table2]
          WHERE [Table2].[ID]      = [Table1].[ID]
              AND [Table2].[Name]  = [Table1].[Name]
              AND [Table2].[State] = [Table1].[State]
      )
      

      【讨论】:

      • 我开始运行此查询,但 30 多分钟后它仍在处理中,看起来还没有完成。我正在查询 table2 中的几千条记录和 table1 中的大约 45 万条记录,所有这些都直接保存在 access 中。您是否知道查询是否有问题,或者是否有太多数据无法访问以处理此特定查询?
      • @Cameron 我会尝试为两个表创建一个关于 ID、名称和状态的多字段索引。那应该会提高性能。删除重复项后,如果这是一次性操作,则可以删除索引。
      猜你喜欢
      • 2019-01-31
      • 2015-02-08
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2022-01-24
      • 2014-04-07
      • 1970-01-01
      相关资源
      最近更新 更多