私は様々な投稿(this one、that one、this other one)を調べて答えがあると思いました。Left Join On And節はサポートされていません
LEFT JOIN
の後にON [condition] AND [other condition]
を追加することもできます(WHERE
も試しました)。しかし、コンピュータははと言います。アクセスは、の結合式がサポートされていないと言っています。
がstudent_records
テーブルの下に考えてみましょう:
STUDENTCODE | SEMESTERINDEX
12345 | 20112
12345 | 20113
12345 | 20121
67890 | 0
67890 | 20111
67890 | 20112
私は私のstudents
テーブルから各学生のための最低限のSEMESTERINDEX
を見つけたい、それが20001 以下(レコード間違っていてもよく、0と1 SEMESTERINDEX
される上です)
私はアクセス権を使用しているので、SQL内部にはVBA関数があります。私が参加しているテーブルがいくつかあります。クエリ全体を引用しています。
SELECT students.STUDENTCODE, prefixes.PREFIXNAMEENG,
students.STUDENTNAMEENG, students.STUDENTSURNAMEENG, levels.level_name, programs.PROGRAMNAMEENG, calendars.calendar_load,
MAX(student_records.SEMESTERINDEX) AS latest_semester, MIN(student_records.SEMESTERINDEX) AS intake_semester,
FROM student_records LEFT JOIN (
(
(
(
(students LEFT JOIN prefixes ON students.PREFIXID = prefixes.PREFIXID)
LEFT JOIN levels ON students.LEVELID = levels.level_id)
LEFT JOIN programs ON students.PROGRAMID = programs.PROGRAMID)
LEFT JOIN calendar_conversion ON students.SCHEDULEGROUPID = calendar_conversion.schedule_id)
LEFT JOIN calendars ON calendar_conversion.calendar_id = calendars.calendar_id) ON student_records.STUDENTCODE = students.STUDENTCODE AND student_records.SEMESTERINDEX> 2001
GROUP BY students.STUDENTCODE, prefixes.PREFIXNAMEENG, students.STUDENTNAMEENG, students.STUDENTSURNAMEENG, levels.level_name, programs.PROGRAMNAMEENG, calendars.calendar_load;
私はAND student_records.SEMESTERINDEX > 2001
を置き忘れましたか?
「SQLではすべてのかっこは問題ではありません」というのは、Accessで行うことです。結合されたテーブルをカッコで囲む必要性については、アクセスは面倒です。 –
@DStanley - nope。アクセスはそれらにクエリを表示しますが、それらを取り出してJetエンジンに送信すると、正常に機能します。結局、SQLシステムです。それは、すべてのそのようなものを入れているクエリビルダエンジンです。 – Hogan
私は基本的にstudent_recordの学生コードごとに最小値と最大値を計算し、結果をminmaxテーブルにラップし、そのテーブルをstudent_recordに結合します。右? – Benjamin