2012-05-26 40 views
0

好吧,我知道標題可能有點不清楚,但我找不到更好的標題。讓我來解釋一下情況,我有3個表格(其實很多,但是對於這個例子我們需要3個表格)。
1. teachers與列teacherid, teachername, other columns (DOB etc)...
2. classes表與結構classid, classname, other columns (students in class etc)
表列subjectid, subjectname, other columns (unimportant at this point)根據多個條件選擇一個列(多對多)

現在你可以從probabably表猜測,存在一個多對多的關係,如表一個老師可以教很多課,一個老師可以教許多科目,一個班可以有很多科目等等。所以包含這些多對多關係的表格是......
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的字典,以及如果主題列出可以在相應的類中教授該主題的教師列表。 (它可能聽起來有點複雜,但請考慮一下,我相信它會有道理:(

所以,我需要填充此字典,因此我需要一個查詢思想,我可以提供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; 

,我已經嘗試了幾個多,但不能這樣做,頭痛10HR後,我以爲計算器!所以,任何人都可以請,請幫我在這裏?

PS:如果你需要進一步澄清有關數據庫(或其他任何東西),請隨時提出..
PPS:我使用的MS-Access 2007中,沒有我不能遷移到SQL Server因一些不重要的原因在此討論

回答

-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; 
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 

Ofcourse其MSS SQL語法。我認爲對於MS ACCESS,你必須使用JOIN。要再次從老師班級獲取教師姓名,您需要將此教師ID加入老師班級。

1

嘗試使用JOIN:

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] 
+0

認真嗎?你甚至讀過整個問題嗎?我在這裏展示的第二種方法是加入,如果真的與訪問一起工作,則會知道它甚至不支持此語法。你不需要所有的大腦加入,我知道什麼是加入.. 但謝謝你的嘗試。 – Razort4x