0

好的,我知道标题可能有点不清楚,但我找不到更好的标题。让我解释一下情况,

我有 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.ClassSubjectClassId, SubjectId, CustomRemark
5.TeacherSubjectTeacherId, SubjectId, CustomRemark
6.TeacherClassTeacherId, 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

4

3 回答 3

1

尝试使用加入:

SELECT tc.TeacherId
FROM ClassSubject
INNER JOIN TeacherSubject ON TeacherSubject.SubjectId = ClassSubject.SubjectId
INNER JOIN TeacherClass ON TeacherClass.TeacerId = TeacherSubject.teacherId AND ON TeacherClass.ClassId = ClassSubject.ClassId
WHERE ClassSubject.ClassId = [Your ClassId]
AND ClassSubject.SubjectId = [Your SubjectId]
于 2012-05-26T12:18:31.600 回答
0

尝试这个

Select TeacherSubject.TeacherId From TeacherSubject 
INNER JOIN ClassSubject ON TeacherSubject.SubjectID=ClassSubject.SubjectID
INNER JOIN TeacherClass ON Teacherclass.ClassID=TeacherSubject.ClassID
Where TeacherClass.ClassID=1 AND ClassSubject.SubjectID=1

当然是 MSS SQL 语法。我认为对于 MS ACCESS,您必须使用 JOIN。要再次从教师班级获取教师姓名,您需要将此教师 ID 加入教师班级。

于 2012-05-26T11:16:49.963 回答
-1

是的!!!其实我自己解决了!这是解决方案..

SELECT Classes.ClassId, Classes.ClassName, Subjects.SubjectId, Subjects.SubjectName, Teachers.TeacherId, Teachers.TeacherName
FROM (Teachers INNER JOIN (Classes INNER JOIN TeacherClass ON Classes.ClassId = TeacherClass.ClassId) ON Teachers.TeacherId = TeacherClass.TeacherId) INNER JOIN (Subjects INNER JOIN TeacherSubject ON Subjects.SubjectId = TeacherSubject.SubjectId) ON Teachers.TeacherId = TeacherSubject.TeacherId
where classes.classid = k and subjects.subjectid = p
GROUP BY Classes.ClassId, Subjects.SubjectId, Teachers.TeacherId, classes.classname, subjects.subjectname, teachers.teachername;
于 2012-05-27T13:38:09.147 回答