MS-Access 按具有 count(*) > 1 奇怪行为的列分组?
Posted
技术标签:
【中文标题】MS-Access 按具有 count(*) > 1 奇怪行为的列分组?【英文标题】:MS-Access group by column having count(*) > 1 weird behavior? 【发布时间】:2018-06-20 23:37:05 【问题描述】:我正在使用 ms-access (MS-Office Professional Plus 2013) 试图确定在将一个表合并到另一个表之前是否有重复的行。我想收集重复的行,并在合并发生之前给出重复的错误。我有两个场景要介绍。第一种情况是在单个列上重复。第二种情况是在两列上重复。对于第一个场景的任何帮助将不胜感激。
场景 1: 这两个表具有完全相同的列结构,因此为简单起见,我将使用以下表结构。 (我只是在 access 中添加了两个表并运行查询以找出正确的语法。)
Duplicates based upon one column:
Table1 Table2
ID ID
1 1
2 3
运行查询: 从表 1 中选择 ID 联盟所有 从表 2 中选择 ID 按 ID 分组,count(*) > 1
结果集总是来自第一个 select 语句的记录。换句话说,它总是返回 Id=1 和 Id=2。如果将 Table1 更改为 Table2,则结果集始终来自 table2。如果我将“全部联合”更改为联合相同的结果。我尝试更改 ID 列名称以及将类型更改为数字而不是自动。知道我做错了什么吗?
场景 2:我知道第二列中的值应该是什么,所以它是硬编码的。我在此处添加了此内容以显示访问在这种情况下似乎可以按预期工作,但在情况 1 中却没有。
Duplicates based upon two columns:
Table1 Table2
ID Field1 ID Field1
1 abc 1 abc
2 bcd 3 abc
运行下面的查询按预期工作。仅返回 ID=1 的行。 从 Table1 中选择 ID、Field1,其中 Field1 = 'abc' 联合所有 从 Table2 中选择 ID、Field1,其中 Field1 = 'abc' 按 ID 分组,Field1 的 count(*) > 1
【问题讨论】:
【参考方案1】:GROUP BY
仅应用于第二个表。您需要先执行UNION ALL
,然后从组合结果中对SELECT
执行GROUP BY
和HAVING
。
不是访问特定的,但类似这样的工作:
SELECT id FROM
(
SELECT id FROM a
UNION ALL
SELECT id FROM b
) AS c
GROUP BY id HAVING COUNT(*) > 1
【讨论】:
【参考方案2】:我首选的方法是使用查询向导中的构建:
查询向导、查找重复查询向导
让 Access 为您创建 SQL 语句,然后您可以对其进行修改和/或将其移动到代码中。
【讨论】:
这是评论,不是答案。它说明了您的偏好,而不是问题所要求的如何解决 SQL 问题。 @KenWhite:我确定我是否会写评论,如果应该是其他人会写的答案,那么他们可以投票赞成或反对。现在人们可以投票赞成或反对...我的答案是解决如何在上述情况和其他情况下获得正确的 SQL 语法。这应该使这个答案在许多情况下都很有用。投票赞成或反对... 这根本没有回答问题,因为 find duplicates 向导只需要一个表,并且引入了整个问题,因为 OP 正在搜索重复项多个表。 好的。我给了你编辑或删除它的机会。你做到了。 :-) 我查看向导只是为了看看有什么可用的。该向导允许您在单个表上查找重复项。如果你想对多个表进行重复,你必须学习如何使用 GUI 来做你想做的事情或编写查询。以上是关于MS-Access 按具有 count(*) > 1 奇怪行为的列分组?的主要内容,如果未能解决你的问题,请参考以下文章
RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确
如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性
Ms-Access 尝试使用“传输文本”创建具有唯一文件名的 csv 文件