首页 > 解决方案 > 使用 SQL 查找/标记重复值

问题描述

我正在尝试更新表中的列以指定记录是否重复。为此,我添加了一个名为“DuplicateRecord”的字段。

我不能在访问中使用查询向导,因为其中的重复选项仅允许将 10 个字段检查为重复项,并且我的表有 10 个以上的字段。

下面的代码对我有用:

Call Module1.RunSQL("UPDATE myTable " & _
"SET myTable.DuplicateRecord = TRUE " & _
"WHERE myTable.[CompanyID] IN (" & _
"SELECT * FROM " & _
"(SELECT myTable.[CompanyID] " & _
"FROM myTable " & _
"GROUP BY myTable.[CompanyID] " & _
"HAVING COUNT(*) > 1 ) T1 ) ")

然而,这段代码只运行一个字段,我需要它运行表中的所有字段(大约有 15 个字段)。

作为一项测试,我尝试使用两个字段来查看是否可以使用以下方法使其工作:

Call Module1.RunSQL("UPDATE myTable " & _
"SET myTable.DuplicateRecord = TRUE " & _
"WHERE myTable.[CompanyID] AND myTable.[Product] IN (" & _
"SELECT * FROM " & _
"(SELECT myTable.[CompanyID], myTable.[Product], COUNT(*) " & _
"FROM myTable " & _
"GROUP BY myTable.[CompanyID], myTable.[Product] " & _
"HAVING COUNT(*) > 1 ) T1 ) ")

但是我收到一条错误消息,说“运行时错误'3306'您编写了一个子查询,该子查询可以返回多个字段,而无需在主查询的 FROM 子句中使用 EXISTS 保留字。修改子查询的 SELECT 语句以仅请求一个领域。”

我试过用谷歌搜索错误,但我似乎无法解决它,因为我不完全理解它。

有谁知道我如何应用重复测试的逻辑?有没有比我目前正在尝试的更简单的方法来做到这一点?我需要为完整记录(15 个字段)执行此操作,因此我有点意识到我目前尝试的方式可能不是最合适的。

标签: sqlvbams-access

解决方案


推荐阅读