MySQL – выбор нескольких столбцов из нескольких таблиц

У меня три стола. Две из них — это отдельные нерелевантные таблицы (студенты и предметы), третья (записи) — та, которая связывает их обе внешними ключами (student_id и subject_id).

Вот все таблицы с записями:

ученики:

+------------+------------+-----------+---------------------+----------------------+
| student_id | first_name | surname   | email               | reg_date             |
+------------+------------+-----------+---------------------+----------------------+
|          1 | Emma       | Harvey    | [email protected]     | 2012-10-14  11:14:13|
|          2 | Daniel     | ALexander | [email protected] | 2014-08-19  08:08:23 |
|          3 | Sarah      | Bell      | [email protected]     | 1998-07-04  13:16:32 |
+------------+------------+-----------+---------------------+----------------------+

предметы:

+------------+--------------+------------+----------------+
| subject_id | subject_name | exam_board | level_of_entry |
+------------+--------------+------------+----------------+
|          1 | Art          | CCEA       | AS             |
|          2 | Biology      | CCEA       | A              |
|          3 | Computing    | OCR        | GCSE           |
|          4 | French       | CCEA       | GCSE           |
|          5 | Maths        | OCR        | AS             |
|          6 | Chemistry    | CCEA       | GCSE           |
|          7 | Physics      | OCR        | AS             |
|          8 | RS           | CCEA       | GCSE           |
+------------+--------------+------------+----------------+    

записи:

+----------+---------------+---------------+------------+
| entry_id | student_id_fk | subject_id_fk | entry_date |
+----------+---------------+---------------+------------+
|        1 |             1 |             1 | 2012-10-15 |
|        2 |             1 |             4 | 2011-09-21 |
|        3 |             1 |             3 | 2015-08-10 |
|        4 |             2 |             6 | 1992-07-13 |
|        5 |             3 |             7 | 2013-02-12 |
|        6 |             3 |             8 | 2016-01-14 |
+----------+---------------+---------------+------------+

Как мне выбрать, скажем, адреса электронной почты каждого студента (таблица students) и имя_субъекта (таблица subjects) тех, у кого есть OCR экзаменационной комиссии (используя таблица записей)? Таким образом, в основном выбирают несколько столбцов из нескольких таблиц, используя своего рода служебную таблицу. Желаемый результат примерно такой:

email           | subject_name
------------------------------
[email protected] | Computing
[email protected] | Physics

(Извините, я не знаю, как правильно воссоздать таблицу в поле вопроса).

Я думаю, это начинается с

SELECT student.email, subjects.subject_name
FROM students, subjects

Но после этого у меня не очень много идей, кроме того, что он использует соединения.

Помощь ОЧЕНЬ приветствуется!! Так что спасибо тебе!


person Dovahkiin    schedule 18.03.2016    source источник


Ответы (1)


Ты на правильном пути. Что вам нужно сделать, так это использовать таблицу entries для соединения двух других таблиц с использованием первичного и внешнего ключей, например:

SELECT student.email, subjects.subject_name
FROM students
INNER JOIN entries  ON students.student_id = entries.student_id_fk 
INNER JOIN subjects ON subjects.subject_id = entries.subject_id_fk 
WHERE subjects.exam_board = 'OCR'
person jpw    schedule 18.03.2016
comment
Благодарю вас! Хотя могу я спросить, используется ли соединение для внутреннего соединения или что-то еще? - person Dovahkiin; 18.03.2016
comment
@Dovahkiin Это сокращение от INNER JOIN да. Вместо этого я отредактирую ответ, чтобы сделать его явным. - person jpw; 18.03.2016
comment
имейте в виду, что лучше использовать «соединение» или «внутреннее соединение» вместо запятой - person Seichi; 18.03.2016