根据多个字段查找重复项

时间:2014-03-12 15:55:41

标签: database ms-access

我做了很多研究,但还没有找到解释如何做到这一点的答案。

我有一张记录有关数据库信息的表。这些信息来自各种来源,其中一些是重复的。

我运行了一个查询,按系统ID,主机ID和数据库名称对所有元组进行分组。这给了我大约1203个结果。所以我的逻辑说,当删除所有重复项时,我应该可以通过查询所有进行分组,并且仍然可以获得该数字。

我的下一步是通过查询系统ID,主机ID,数据库名称和数据库版本来运行组。这产生了大约1300个结果。换句话说,我已经创建了97个额外的结果,其中包含重复项。

如何找到我添加了哪些 97系统?

我的第一个想法是做一个简单的连接,包括第二个查询中的所有结果,只有匹配的第一个查询中的结果 - 然后返回第一个查询的结果为null。但是我当然没有在第二个表中使用数据库版本,所以这不起作用。

我还尝试使用MS Access查询向导并创建两个查询,这些查询找到了数据中的所有重复项,一个包括数据库版本,另一个没有 - 然后尝试获得差异。但同样,我不知道将结果链接到什么地方。

修改

如果我的问题不够清楚,这里有一些示例数据:

原始表:

ID          Hostname          Database Name        Version
12          abc               abc                  10
12          abc               abc                  11
12          def               def                  11
12          def               ghi                  11
13          ghi               jkl                  10

因此,当我运行第一个查询时,按ID,主机名和数据库进行分组,我得到了这个:

ID          Hostname          Database Name      
12          abc               abc                                 
12          def               def                  
12          def               ghi                  
13          ghi               jkl

当我运行第二个查询时,按ID,主机名,数据库和版本进行分组,我得到了这个:

ID          Hostname          Database Name        Version
12          abc               abc                  10
12          abc               abc                  11
12          def               def                  11
12          def               ghi                  11
13          ghi               jkl                  10                 

我知道当字段都很常见时如何摆脱重复。我首先想要做的是识别任何具有重复ID,主机名和数据库名称但不是相同版本的系统。注意查询2中的一行额外行与查询1相比 - 我想执行查询以获取JUST该行。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以将这两个结果集选择到两个不同的临时表中,然后再选择

SELECT 
  someCommongField 
FROM 
  biggerTempTable  
 WHERE NOT IN 
    (SELECT someCommonField FROM smallerTempTable)

答案 1 :(得分:0)

在MS Access 2010中,您可以通过以下方式使用查询向导找到重复项:

  • 启动查询向导
  • 选择“查找重复项查询向导”
  • 选择表格
  • 选择所有字段(ID除外 - 如果有的话)
  • 选择ID作为附加字段(可选)

最后,您将在查询中看到包含重复值的行,您将能够删除不需要的行。 您可以找到Here一篇关于查找和删除重复数据的文章。