12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
1

Сложный запрос из нескольких таблиц

27.08.2012, 01:10. Показов 1339. Ответов 13
Метки нет (Все метки)

Здравствуйте.
Как составить запрос на вывод Студентов, независимо от того, есть ли у него какая либо оценка за определённые предмет или нет.
Пробовал делать такое, но выводит только тех у кого есть оценка.
Бд прилагаю.
Вложения
Тип файла: rar db.rar (37.7 Кб, 14 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2012, 01:10
Ответы с готовыми решениями:

Создание запроса для отчета сведение нескольких запросов в один или сложный запрос с объединением
Здравствуйте! Очень надеюсь на помощь профессионалов! Есть excelевская таблица с множеством ...

Запрос из нескольких таблиц
Добрый день, уважаемые форумчане. Пытаюсь самостоятельно создать базу данных для диспетчерской...

Запрос из нескольких таблиц
Есть таблица Трудоемкость, Столбцы:Наименование детали, Технология, Пов1, Пов2, Пов348, Пов567,...

Запрос из нескольких таблиц
Всем привет. Имеются 3 таблицы - акустические гитары, электрогитары, бас гитары. В каждой таблице...

13
Эксперт MS Access
6769 / 4359 / 276
Регистрация: 12.08.2011
Сообщений: 12,868
27.08.2012, 05:25 2
.............
Миниатюры
Сложный запрос из нескольких таблиц  
0
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
27.08.2012, 05:59  [ТС] 3
Тогда вот.
Вложения
Тип файла: rar db1.rar (20.2 Кб, 20 просмотров)
0
Эксперт MS Access
6769 / 4359 / 276
Регистрация: 12.08.2011
Сообщений: 12,868
27.08.2012, 06:56 4
Тогда так:
T-SQL
1
2
3
4
SELECT Students.FIO, Ratings.Rate, Day([Data]) AS Days
FROM Students LEFT JOIN (Ratings LEFT JOIN Dates ON Ratings.ID_data = Dates.ID) 
ON Students.ID = Ratings.ID_student
WHERE (((Students.ID_group)=6) AND ((Ratings.ID_subject)=1 Or (Ratings.ID_subject) Is Null));
Таблица с датами не нужна, достаточно поле дата добавить в таблицу с оценками.
1
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
29.08.2012, 06:03  [ТС] 5
А как должен выглядеть запрос, если я хочу сменить месяц для выборки?
0
Эксперт MS Access
6769 / 4359 / 276
Регистрация: 12.08.2011
Сообщений: 12,868
29.08.2012, 08:14 6
например для марта:
SQL
1
WHERE MONTH([DATA]) = 3
но месяц без года вам врядли понадобится, так что лучше выбирать ещё и с годом, например:
T-SQL
1
where format([data], "yyyymm") = 201203
1
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
29.08.2012, 08:28  [ТС] 7
Большое спасибо. Вы спасли мой проект!)
0
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
01.09.2012, 08:23  [ТС] 8
Извините, что ещё раз поднимаю тему, но не могу понять в чём ошибка.
Я в запрос подставил
SQL
1
MONTH([DATA]) = 3
И у меня перестали выводиться те люди, у которых столбцы Rate и Days пустые.
0
Эксперт MS Access
6769 / 4359 / 276
Регистрация: 12.08.2011
Сообщений: 12,868
01.09.2012, 09:00 9
тогда добаьте
T-SQL
1
or [data] is null or rate is null
тогда выведутся и пустые, если не получится - выложите окончательный вариант.
0
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
01.09.2012, 10:42  [ТС] 10
Добавил и изменения получились, но теперь стали выводиться студенты абсолютно из всех групп (и их данные).
0
Эксперт MS Access
6769 / 4359 / 276
Регистрация: 12.08.2011
Сообщений: 12,868
01.09.2012, 10:57 11
T-SQL
1
and Students.ID_group = 6
Добавьте перед каждым или
1
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
01.09.2012, 11:31  [ТС] 12
Добавил, изменения получились, но теперь стали выводить оценки у всей группы за все предметы. По аналогии с
SQL
1
AND Students.ID_group = 6
я так же добавил и
SQL
1
AND Ratings.ID_subject=1
и всё заработало. Спасибо!
Вот окончательный вариант:
SQL
1
2
3
4
SELECT Students.FIO, Ratings.Rate, DAY([DATA]) AS Days
FROM Students LEFT JOIN (Ratings LEFT JOIN Dates ON Ratings.ID_data = Dates.ID) 
ON Students.ID = Ratings.ID_student
WHERE MONTH([DATA]) = 9 AND Students.ID_group = 6 AND Ratings.ID_subject=1 OR [DATA] IS NULL AND Students.ID_group = 6 AND Ratings.ID_subject=1 OR Rate IS NULL AND (((Students.ID_group)=6) AND ((Ratings.ID_subject)=1 AND Students.ID_group = 6 AND Ratings.ID_subject=1 OR (Ratings.ID_subject) IS NULL));
0
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
01.09.2012, 11:39 13
Цитата Сообщение от Mihey_A Посмотреть сообщение
Извините, что ещё раз поднимаю тему, но не могу понять в чём ошибка.
Я в запрос подставил
SQL
1
MONTH([DATA]) = 3
И у меня перестали выводиться те люди, у которых столбцы Rate и Days пустые.
Если говорить непосредственно о запросе, то в данном случае условие на дату должно ставиться именно в той таблице, в которой эта дата есть. В запросе есть LEFT JOIN и эта связь накладывает ограничения. Меняется только предложение FROM, и оно следовательно таково:
T-SQL
1
2
3
FROM Students LEFT JOIN (Ratings LEFT JOIN (select * from Dates where month(data)=9) q 
ON Ratings.ID_data = q.ID) 
ON Students.ID = Ratings.ID_student
Но я не могу принять также отдельную таблицу для дат. Не вижу ровно никакого смысла в ней. Даты должны быть в таблице Raiting
0
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
01.09.2012, 11:55  [ТС] 14
Я работаю с бд не так давно (студент) и не знал как составить правильно структуру. Вот собственно и поэтому сделал так, как есть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2012, 11:55

Запрос на выборку из нескольких таблиц
Сразу оговорюсь - перерыл весь форум и гугл. Есть много похожего, но ничего применительно к моей...

Запрос с выборкой из нескольких таблиц
Доброе время суток! Сразу выражу огромную благодарность тем кто помогает всем на этом проекте, я...

Запрос на удаление из нескольких таблиц
Хочу удалить в одном запросе записи из нескольких таблиц, но система требует указать из какой...

Запрос из нескольких таблиц с арифметикой
Господа, подскажите как правильно сделать запрос из двух разных таблиц? в прилагаемой базе запрос...

Запрос из нескольких таблиц, с условием, на добавление
Добрый день. Решил упростить подсчет дохода автомобилей, и столкнулся с проблемой. Есть две...

Запрос из нескольких таблиц с полем «Вложение»
Здравствуйте! Уже обращался с подобной проблемой поведения запроса из нескольких таблиц, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.