好的,我知道标题可能有点不清楚,但我找不到更好的标题。让我解释一下情况,
我有 3 个表(实际上很多,但对于这个例子,我们需要 3 个)。
1.teachers
带列的表teacherid, teachername, other columns (DOB etc)...
2.classes
带列的表classid, classname, other columns (students in class etc)
3.subjects
带结构的表subjectid, subjectname, other columns (unimportant at this point)
现在,您可能可以从表格中猜到,存在多对多关系,因为一位老师可以教很多课,而且,一位老师可以教很多科目,一个班可以有很多科目等等。所以包含的表格这些多对多关系是..
4.ClassSubject
列ClassId, SubjectId, CustomRemark
5.TeacherSubject
列TeacherId, SubjectId, CustomRemark
6.TeacherClass
列TeacherId, ClassId, CustomRemark
您可能会再次猜到,表 4 代表了哪些类具有哪些主题的映射(前两个列被标记为主键)。表 5 代表什么老师可以教什么科目(前两列标记为 pk),再次表 6 代表什么老师可以教什么课程。(我只是希望我足够明确,不会混淆你!)
现在的问题是,有一次我有这本字典,Dictionary<int, Dictionary<int, List<int>>> dctClsSubTeachers
它以给定的顺序存储类的 id,对于每个类的 id,另一个包含主题 id 和类的 id 的字典,如果of subject 可以在相应班级教授该科目的教师列表。(这听起来可能有点复杂,但请仔细考虑一下,我相信它会有意义:(
所以,我需要填充这本字典,因此我需要一个查询思想,我可以提供 classId 和 subjectId 作为参数,我得到一个所有老师的列表,这些老师不仅可以教那个科目,还可以在课堂上教那个科目在参数中给出,(我们有表 4、5 和 6 的关系),因此我可以填充该字典
顺便说一下,我尝试了很多方法,但都没有奏效,我尝试过的一些方法是..
select teacherId from teachers where teacherid in (SELECT teacherid from teacherclass where classid = k
intersect
SELECT teacherid from teachersubject where subjectid = k2) // I can't use this because access doesn't support intersect
我试过的另一个
SELECT teacherid
FROM Teachers, (ClassSubject INNER JOIN TeacherClass ON ClassSubject.ClassId = TeacherClass.ClassId) INNER JOIN TeacherSubject ON ClassSubject.SubjectId = TeacherSubject.SubjectId;
我又尝试了几个,但做不到,在头痛 10 小时后,我想到了 stackoverflow!那么,任何人都可以请,请在这里帮助我吗?
ps:如果您需要有关数据库(或其他任何内容)的任何进一步说明,请随时询问..
pps:我使用的是 ms-access 2007,不,由于某些原因在此讨论中不重要,我无法迁移到 sql server