【发布时间】:2011-03-20 04:35:09
【问题描述】:
我有另一个 SQL/access 2007 问题,看起来很基础,但我不知道如何在 Google 上找到它。
我有这张 STUDENT-TERMS 表,其中包含以下字段:
StudentTermID
StudentID(指向 STUDENT 表的链接)
TermID(链接到 TERMS 表)
TermGPA(这是需要记录的信息块)
STUDENT 表如下所示:
学生证
名字
TERMS 表如下所示:
TermID
开始日期
结束日期
我有一个文档,其中包含上传到 Access 文档中的所有信息。我获得的这份文档与数据库中存在的学生 ID 和学期 ID 相同。
然后我可以运行附加查询将数据放入 STUDENT-TERMS 表中。这很好。
如何编写查询以使每个学生的每个学期只有一条记录? 例如,我现在在表中有这些数据:
学生学期 ID:5
学号:塔拉
TermID:1011Autumn
学期GPA:3.8
当我上传并附加一个新文档时,它可能仍包含有关 Tara 的信息,我希望数据库在附加时说“嘿,我们已经有了,跳过它”。我该如何表示?
这是结论/答案/解决方案: 谢谢大家的帮助。这就是我最终要做的事情:
我在表中创建了一个名为 StudentTerm 的新字段,其中包含 StudentID 和 Term 的串联(如:Tara1011Autumn)。此字段已编入索引,没有重复项。
执行追加的查询如下所示:
插入 StudentTerms(StudentID、TermID、GPA、StudentTerm) 选择 Upload_Students.StudentID、Upload_Students.TermID、Upload_Students.GPA、 [Upload_Students]![StudentID] & [Upload_Students]![TermID] AS Expr1 FROM Students INNER JOIN Upload_Students ON Students.StudentID = Upload_Students.StudentID;
此查询尝试使用 Tara1011Autumn 填充 StudentTerm 字段。如果该字符串已存在于表中,则不会追加记录。
【问题讨论】:
-
请描述表学生和术语
-
您的上传文件中是否包含 StudentID?
-
为什么要连接字段而不是像您接受的答案中建议的那样创建复合索引?从我的角度来看,出于各种原因,你最终做的是一个非常糟糕的主意。
-
我想我误解了答案。
-
但是现在您必须为所有新记录填充该字段,并且如果组成值发生更改,则必须对其进行更新。两个字段上的复合索引是正确答案(您接受的那个)。如果您不明白这意味着什么,请询问,一切都会得到解释。