У меня возникли проблемы с правильной формулировкой запроса MySQL. Все, что я пробовал, не дает мне того, что нужно, или дает синтаксическую ошибку.
У меня есть три таблицы: «Клиенты», «Курсы» и «Курсы для клиентов».
В таблице «Клиенты» указаны только основные координаты человека: идентификатор, имя, адрес, адрес электронной почты и т. д.
+----------+-----------------------------+------+
| ClientID | Name | Address | etc. |
+----------+-----------------------------+------+
| 10 | Joe Smith | 1 Main St. | ... |
| 20 | Bob Smith | 2 Main St. | ... |
| ... | ... ... | ... ... ... | ... |
+----------+-----------------------------+------+
В таблице «Курсы» хранится название курса и его идентификатор.
+----------+-----------------------+
| CourseID | Name |
+----------+-----------------------+
| 100 | Intro. to Subject |
| 200 | Intermediate Subject |
| 300 | Advanced Subject |
| ... | ... ... ... ... |
+----------+-----------------------+
В таблице CoursesForClients есть CourseID и ClientID. Данный клиент может пройти несколько курсов, поэтому для каждого курса, который прошел клиент, есть строка с идентификатором человека и идентификатором курса.
+----------+----------+
| CourseID | ClientID |
+----------+----------+
| 100 | 1 |
| 200 | 1 |
| 300 | 1 |
| 100 | 2 |
| 200 | 2 |
| ... | ... |
+----------+----------+
Теперь мне нужно иметь возможность перечислить Клиента — всего один раз — вместе со всеми Курсами, которые она прошла. Итак, результат запроса может выглядеть так:
10:Joe Smith
1 Main St.
Somewhere, AL
Intro. to Subject
Intermediate Subject
Advanced Subject
---------------------------
20:Bob Smith
2 Main St.
Somewhere, AL
Intro. to Subject
Intermediate Subject
Таким образом, этот вывод отражает отношения между Клиентом и Курсом. Ключевым моментом здесь является то, что независимо от того, сколько Курсов прошел Клиент, сведения о Клиенте появляются только один раз, после чего следует список всех курсов, которые она прошла.
Есть еще одна особенность, заключающаяся в том, что есть еще одна таблица, в которой перечислены оценки за курс для клиента, и этот GradeID также хранится в таблице CoursesForClients, и есть еще одна таблица оценок с идентификатором и описанием оценки. Но я не буду беспокоиться об этом прямо сейчас. На данный момент все, что мне нужно, это просто показанный основной вывод, как описано выше.
Похоже, что для этого должно быть легко настроить запрос с помощью JOIN и, возможно, GROUP BY, но у меня здесь блок, и я не могу понять это правильно. Таким образом, любая помощь будет очень признательна. Благодарю вас!
Joe Course1, Course2, Course3
Bob Course2
Tom Course1, Course2
Это правильно? Я правильно интерпретирую ваш комментарий? Я бы подумал, что это может сделать какая-то комбинация DISTINCT или GROUP BY, напримерSELECT DISTINCT Name FROM Clients.
- person Lew   schedule 08.06.2015