powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Хитрый запрос - срочно нужна помощь!
2 сообщений из 2, страница 1 из 1
Хитрый запрос - срочно нужна помощь!
    #32021823
Peter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Составил запрос со множественными связями между таблицами. Проблема в том, что 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;


Если кто сможет помочь, буду очень благодарен!
...
Рейтинг: 0 / 0
Хитрый запрос - срочно нужна помощь!
    #32021883
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так:
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)
)));
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Хитрый запрос - срочно нужна помощь!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]