我正在玩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。如果将表1更改为表2,则结果集始终来自表2。如果我更改“全部联盟”以合并相同结果。我尝试更改ID列名称以及将类型更改为数字而不是自动。知道我在做什么错吗?
场景2:我知道第二列中的值应该是什么,因此它是硬编码的。我在此处添加此代码是为了显示访问在此情况下似乎可以正常工作,但在情况1中却无法正常工作。
Duplicates based upon two columns:
Table1 Table2
ID Field1 ID Field1
1 abc 1 abc
2 bcd 3 abc
运行下面的查询可以正常工作。仅返回ID = 1的行。
从表1中选择ID,字段1,其中字段1 ='abc'
全部合并
从表2中选择ID,Field1,其中Field1 ='abc'
按ID分组,Field1的count(*)> 1
答案 0 :(得分:1)
domain.com/images/filename
仅应用于第二个表。您需要先根据合并后的结果对GROUP BY
进行UNION ALL
,然后对GROUP BY
进行HAVING
和SELECT
。
不是特定于Access的,但是类似的方法有效:
SELECT id FROM
(
SELECT id FROM a
UNION ALL
SELECT id FROM b
) AS c
GROUP BY id HAVING COUNT(*) > 1
答案 1 :(得分:-1)
执行此类操作的首选方法是使用查询向导中的版本:
查询向导,查找重复查询向导
让Access为您创建SQL语句,然后您可以对其进行修改和/或将其移动到代码中。