插入唯一的记录到MS访问2007年
所以我一直在环顾四周,没有发现太多。我提前道歉,因为这可能是这样做的错误方式,但它是这样。插入唯一的记录到MS访问2007年
所以我必须跟踪同事已经完成的课程。这是通过提供MS访问数据库的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中有几个地方鼓励您使用而不是使用复合主键。
insert into CourseCompletions (
, FullName
, CourseName
, CompletionDate
) select
[Full name]
, [Course]
, [Date]
from excel_table;
这将给你输入Excel表格中的每一行:
create table CourseCompletions (
ID autoincrement primary key
, FullName varchar(100)
, CourseName varchar(100)
, CompletionDate date
);
然后你可以从Excel文件中的所有数据吞掉:你可以用一个简单的整数主键创建Access表一个唯一的编号并将其存储在Access表中。现在您需要决定如何拒绝CourseCompletions表中的冲突行。 (以下查询仅显示您决定拒绝的而不是的记录。)如果您希望在以后的日子拒绝由同一人同一门课程的完井:
select
ID
, FullName
, CourseName
, min(CompletionDate)
from CourseCompletions
group by
ID
, FullName
, CourseName;
如果你想早日拒绝完井简单地改变最小到最大。
如果你要拒绝任何课程完成后,在Excel表格中出现较早:
select
cc1.ID
, cc1.FullName
, cc1.CourseName
, cc1.CompletionDate
from CourseCompletions as cc1
inner join (
select
max(ID) as WantedID
, FullName
, CourseName
from CourseCompletions
group by FullName, CourseName
) as cc2
on cc1.ID = cc2.WantedID;
,拒绝当然落成,后来出现在Excel表格中,只需用MIN取代MAX。
因此,使用整数主键给你一些选项。
所以基本上你需要(FullName,CourseName)组合键。不知道如何在MS Access中工作,但对于MySQL我创建了一个演示http://sqlfiddle.com/#!2/8e17a/1。希望这有助于 – 2013-02-19 10:42:50
它的确帮助我认为我可以使用你的代码很少调整访问。非常感谢你! – divdeamor 2013-02-19 13:41:13