У меня есть три таблицы. Два из них - отдельные нерелевантные таблицы (студенты и субъекты), третий (записи) - это тот, который связывает их как с внешними ключами (student_id, так и subject_id).MySQL Выбор всех записей из одной таблицы и их совпадений/NULL из другой таблицы
Вот все таблицы с записями:
студентов:
+------------+------------+-----------+---------------------+---------------------+
| student_id | first_name | surname | email | reg_date |
+------------+------------+-----------+---------------------+---------------------+
| 1 | Emily | Jackson | [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 |
| 4 | Alex | Harte | [email protected] | 1982-06-14 00:00:00 |
+------------+------------+-----------+---------------------+---------------------+
предметы:
+------------+--------------+------------+----------------+
| 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 |
+----------+---------------+---------------+------------+
Как бы идти о выборе имена o f все учащиеся (students.first_name) и имя (subjects.subject_name) от того, что у них есть? Я имею в виду, что все имена учеников возвращаются, и все имена субъектов для их записей перечислены рядом с ними, с NULL для тех, у кого нет записей. Я также хочу, чтобы он был сгруппирован по первому имени в алфавитном порядке.
Я хочу выход быть что-то вроде:
first_name subject_name
--------------------------
Alex NULL
Daniel Chemistry
Emily French
Emily Computing
Sarah Physics
Sarah RS
хотя я не уверен, что это совершенно правильно.
Я думаю, это так:
SELECT students.first_name, subjects.subject_name
FROM students
JOIN entries ON entries.student_id_fk = students.student_id
JOIN subjects ON entries.subject_id_fk = subjects.subject_id
GROUP BY students.first_name;
Действительно единственное, что я не уверен в том, какой присоединиться использовать и где поставить его, или если таблицы должны быть перечислены в другом заказ. Я думаю, что это должно быть левое соединение, но я не уверен.
Помощь очень ценится!
'ЛЕВЫЙ JOIN' должен работать. Разве это не работает с левым соединением? – Spidey
Вы можете узнать о объединениях из [w3schools sql joins] (http://www.w3schools.com/sql/sql_join.asp) и этого [инфографика на SO] (http://stackoverflow.com/a/23653569/4879022) – Spidey
Один вопрос: из вашего примера у вас есть только «NULL» в столбце 'subject_name' для ваших результатов, в приведенном ниже ответе предполагается, что вы не хотите, чтобы совпадения« NULL »находились в стороне« студентов »запроса. То, что вы хотите, чтобы все студенты независимо от соответствующих предметов. Если это неверно, и вы также хотите, чтобы все предметы, у которых не было никаких студенческих матчей, ответ на этот вопрос отвечает scaisEdge. Мой запрос не будет иметь нулей в списке учеников, только в предметах. Это означает, что вы получите всех учеников, но если у вас нет ученика, предмет не появится в списке. – gmiley