2017-07-19 61 views
0

我有两个表,每个表中有三个以上的字段。有是在这两个文件一组记录,下面是一个模拟例如:基于三个字段和两个表删除重复数据

表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,名称和状态相同,则存在重复项。所以上面的数据是重复的。我如何从一个表中删除它们(我有900多个重复项,因此不能逐个删除)?

+0

ID是不是两个表中的主键?为什么你需要打扰名称和状态?或者,可能相反:ID与名称和状态有什么关系? –

+0

ID不是任一表中的主键。身份证,姓名和州一起是什么定义的唯一性。如上所述,这些是模拟示例,实际数据包括SSN,生效日期和Code1等字段。使用这些数据的系统允许SSN,有效日期和代码的任意组合,除了三者之外,这些组合可以创建重复数据。 – Cameron

回答

0
delete table1 
where ID in(select distinct ID from table1 where ID in (Select ID from table2)) 

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

+0

这是行不通的,因为ID不是主键 – Cameron

0

此查询将产生的消除重复的结果集:

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 
0

这是最直接的方法,假设你想从表1中删除。我用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] 
) 
+0

我开始运行这个查询,但它在超过30分钟后仍在处理中,看起来并没有接近完成。我正在查询table2中的几千条记录,table1中大约有45万条记录,所有这些都直接保存在access中。你知道这个查询是否有问题,或者它是否有太多的访问数据来处理这个特定的查询? – Cameron

+0

@Cameron我想尝试在两个表的ID,名称和状态上创建一个多字段索引。这应该会提高性能。完成删除重复项后,如果这是一次性操作,则可以删除索引。 –

相关问题