所以我四处找了找,没找到什么。我提前任命,因为这可能是错误的做法,但它是什么。
所以我必须追踪同事完成的课程。这是通过向ms-access数据库提供数据的excel工作表完成的。有3个字段提供给我。
全名、课程名称和完成日期。
我知道这里没有主键,所以我试图创建一个查询,该查询将只追加从excel工作表中提取的唯一记录。我可以基于一个字段来完成这项工作,但是需要帮助,使我的查询只在全名和课程名都不相同的情况下附加它,例如Joe Somebody, Course#1, 14feb13
Joe Somebody, Course#2, 15feb13
Joe Somebody, Course#1, 15feb13
我需要一个查询,该查询将前两行追加到一个表中,但忽略第三行,因为此人已经完成课程1。这就是我目前所拥有的,基本上将我的名字字段变成主键。
INSERT INTO table [Full name], [Course], [Date]
SELECT excel_table.[Full name], excel_table.[Course], excel_table.[Date]
FROM excel_table
WHERE excel_table.[Full name] Not in (SELECT table.[Full Name] FROM table)
我也有一些不是空的东西在结尾,但我不认为这会与问题有关。
最佳答案
最简单的方法是添加一个索引,这样就不会得到重复项。在这种情况下,复合主键似乎就是答案。只需选择要包含在组合键中的所有字段,然后单击“主键”按钮:
构成主键的任何字段都不允许为空,但只要字段的组合不匹配,每个字段中的数据都可以重复。所以:
Joe Somebody, Course#1, 14feb13 <-- good
Joe Somebody, Course#2, 15feb13 <-- good
Joe Somebody, Course#1, 15feb13 <-- fails
Joe SomebodyElse, Course#1, 14feb13 <-- good
现在,如果使用“查询设计”窗口运行普通的追加查询生成,则如果该记录在Excel导入表中存在两次或在Access中已存在,则会出现错误: