さて、タイトルが少し不明瞭かもしれないことはよく知っていますが、より良いタイトルを見つけることができませんでした。状況を説明させてください、
私は3つのテーブルを持っています(実際にはたくさんありますが、この例では3つ必要です)。
1.teachers
列のあるテーブルteacherid, teachername, other columns (DOB etc)...
2.列のあるテーブル
3.構造体のあるテーブルclasses
classid, classname, other columns (students in class etc)
subjects
subjectid, subjectname, other columns (unimportant at this point)
表から推測できるように、多対多の関係があり、1人の教師が多くのクラスを教えることができ、1人の教師が多くの科目を教えることができ、1つのクラスに多くの科目を含めることができます。これらの多対多の関係は..4
。列
5.列
6.列ClassSubject
ClassId, SubjectId, CustomRemark
TeacherSubject
TeacherId, SubjectId, CustomRemark
TeacherClass
TeacherId, ClassId, CustomRemark
繰り返しになりますが、表4は、どのクラスにどのサブジェクトがあるかを示すマップを表しています(最初の2列は主キーとしてマークされています)。表5は、どの教師がどの科目(pkとしてマークされた最初の2列)を教えることができるかを表し、表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
私が試したもう1つ
SELECT teacherid
FROM Teachers, (ClassSubject INNER JOIN TeacherClass ON ClassSubject.ClassId = TeacherClass.ClassId) INNER JOIN TeacherSubject ON ClassSubject.SubjectId = TeacherSubject.SubjectId;
そして、私はさらにいくつか試しましたが、それを行うことができませんでした。10時間の頭痛の後、私はスタックオーバーフローを考えました!だから、誰かお願いできますか、ここで私を助けてください?
ps:データベース(またはその他)についてさらに説明が必要な場合は、お気軽にお問い合わせください
。pps:ms-access 2007を使用していますが、このディスカッションでは重要でない理由により、SQLサーバーに移行できません。