|
Хитрый запрос - срочно нужна помощь!
|
|||
---|---|---|---|
#18+
Составил запрос со множественными связями между таблицами. Проблема в том, что Access ругается: "не могу определить, в каком порядке связывать таблицы, разбейте на подзапросы". С подзапросами все работает, но мне надо в виде ОДНОГО запроса! Может как-то можно переконструировать этот запрос? Теперь излагаю задачу. Моделируем учебный процесс: Группы, Предметы, Студенты, Экзамены. Структура таблиц: groups: idGroup (PK) textGroup students: idStudent (PK) idGroup (FK -> groups) fio exams: idExam (PK) idStudent (FK) idDiscipline (FK) date mark disciplines: idDiscipline (PK) idGroup (FK) textDiscipline Необходимо составить запрос: Выбрать группы, все студенты которых сдали все экзамены на оценку >= 3. (Примечание: если экзамен сдан на 2, то он может быть потом пересдан на другую оценку. Если экзамен не сдавался вообще, то соответствующей записи в exams вообще не будет). Ниже _примерно_ как этот запрос должен выглядеть. Но: 1) Аксес не может в одном FROM скомбинировать INNER JOIN и LEFT JOIN 2) Перед присоединением таблицы exams из нее надо выкинуть все записи с оценкой < 3 (т.е. типа WHERE exams.mark < 3), чтобы исключить случаи, когда экзамен был пересдан на более высокую оценку. SELECT groups.textGroup FROM ((groups INNER JOIN students ON groups.idGroup = students.idGroup) INNER JOIN disciplines ON groups.idGroup = disciplines.idGroup) LEFT JOIN exams ON (students.idStudent = exams.idStudent) AND (disciplines.idDiscipline = exams.idDiscipline) GROUP BY groups.textGroup HAVING MIN (IIF (ISNULL (exams.mark), 0, exams.mark)) > 2 ORDER BY groups.textGroup; Если кто сможет помочь, буду очень благодарен! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2002, 14:42 |
|
Хитрый запрос - срочно нужна помощь!
|
|||
---|---|---|---|
#18+
Может так: SELECT groups.textGroup FROM groups WHERE (((groups.idGroup) Not In (SELECT students.idGroup FROM students LEFT JOIN exams ON students.idStudent = exams.idStudent GROUP BY students.idGroup, students.idStudent HAVING (Max(exams.mark) Is Null Or Max(exams.mark)<3) ))); ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2002, 09:48 |
|
|
start [/forum/topic.php?fid=45&gotonew=1&tid=1683692]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 263ms |
0 / 0 |