0

さて、タイトルが少し不明瞭かもしれないことはよく知っていますが、より良いタイトルを見つけることができませんでした。状況を説明させてください、

私は3つのテーブルを持っています(実際にはたくさんありますが、この例では3つ必要です)。
1.teachers列のあるテーブルteacherid, teachername, other columns (DOB etc)...
2.列のあるテーブル 3.構造体のあるテーブルclassesclassid, classname, other columns (students in class etc)
subjectssubjectid, subjectname, other columns (unimportant at this point)

表から推測できるように、多対多の関係があり、1人の教師が多くのクラスを教えることができ、1人の教師が多くの科目を教えることができ、1つのクラスに多くの科目を含めることができます。これらの多対多の関係は..4 。列
5.列 6.列ClassSubjectClassId, SubjectId, CustomRemark
TeacherSubjectTeacherId, SubjectId, CustomRemark
TeacherClassTeacherId, 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サーバーに移行できません。

4

3 に答える 3

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]
于 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

もちろん、それはMSSSQL構文です。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 に答える